Go, Rust and C++ Side by Side

Why?

Recently I did a blog post where I show the basic syntax in Javascript, Python, Ruby and PHP side by side and got a pretty good response. Figured I’d do the same thing with some lower-level compiled languages. So in this post, I’ll be showing how to do many basic things in Go, Rust and C++ (Keep in mind Go and Rust were created to be modern alternatives to situations you’d use C/C++/Java for speed and efficiency).

Hello World

C++

#include <iostream>using namespace std;int main() {
std::cout << "Hello World \n";
}

Go

package mainimport "fmt"func main(){
fmt.Println("Hello World")
}
// go run HelloWorld.go

Rust

fn main() {
println!("Hello World!");
}
// rustc HelloWorld.rs && ./HelloWorld

Declaring Variables

C++

#include <iostream>using namespace std;int main() {
int num = 5;
bool isItTrue = true;
char str[] = "Hello World";
std::cout << "Hello World \n" << str << endl;
}

Go

package mainimport "fmt"func main(){
var num int = 5
var isItTrue bool = true
var hello string = "Hello World"
dynamicTyping := 6
fmt.Println("Hello World")
}

Rust

fn main() {
let x = 5; //immutable
let mut y = 6; //mutable
const TYPED_CONSTANT:u32 = 100_000;
let isItTrue:bool = true;
let aString: str = "Hello World";
println!("Hello World!");
}

Arrays and Key/Value Pairs

C++

#include <iostream>using namespace std;int main() {
int nums[] = {1,2,3,4,5,6};
int five = nums[1] + nums[2];
std::cout << "Hello World \n";
}

Go

package mainimport "fmt"func main(){
arr := [5]int{1,2,3,4,5}
five := arr[1] + arr[2]
fmt.Println("Hello World")
}

Rust

fn main() {
let nums: [i32; 5] = [1,2,3,4,5];
let five: i32 = nums[1] + nums[2];
println!("Hello World!");
}

Functions

C++

#include <iostream>using namespace std;int addNums (int x, int y){
return x + y;
}
int main() {
int num = addNums(5, 6); //returns 11
std::cout << "Hello World \n";
}

Go

package mainimport "fmt"func addOne(x int, y int) int {
return x + y
}
func main(){
num := addOne(5,6)
fmt.Println("Hello World")
}

Rust

fn main() {
let num: i32 = addOne(5,6);
println!("Hello World!");
}
fn addOne(x: i32, y: i32) -> i32{
x+y;
}

OOP

C++

#include <iostream>
#include <string>
#include <cstring>
using namespace std;
class Dog {
//property declaration
public:
string name;
int age;
//constructor sig
Dog(string n, int a);
//method sigs
void bark();
};
Dog::Dog(string n, int a){
name = n;
age = a;
}
void Dog::bark(){
std::cout << "Woof! \n";
}
int main() {
Dog sparky("Sparky", 5);
sparky.bark();
}

Go

package mainimport "fmt"//Define a struct
type Dog struct {
name string
age int
}
// Struct Method
func (dog Dog) bark(){
fmt.Printf(dog.name + " barks.")
}
func main(){
sparky := Dog{"Sparky", 5}
sparky.bark()
}

Rust

// declare a struct
struct Dog {
name: String,
age: i32
}
// declare methodsimpl Dog {
fn bark(&self){
println!("{} is barking", self.name);
}
}
fn main() {
let sparky = Dog{name: String::from("Sparky"), age: 5};
println!("{} is of age {}", sparky.name, sparky.age);
sparky.bark();
}

In Conclusion

I hope this gives you a nice visual of what is the same and different between these languages.

Alex Merced is a Full Stack Developer, learn more about his work at AlexMercedCoder.com

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store