go语言基础语法和C++的差别

最近学习go语言,发现go 比C++学起来要简单多了,其语法上有诸多不同,具体总结如下:
1:类型
go 语言中有以下几种基本类型bool,int,float32,float64,string,Pointer array,slice,struct,interface,map complex64,complex128 uint8 uint16等。在基本数据类型上和C++区别不大。
2:声明
go语言声明变量的方式和C++完全不一样,例如声明一个整型,C++要这样做

int a;

go 中是这样的

var a int

3:函数,C++声明函数的方式是返回值类型+函数名+函数参数+{},go语言中声明函数的方式是func +函数名+函数参数+返回值类型,例如:

func add(x int ,y int) int{
}

注意到函数参数的声明方式,变量在前,类型在后。
4:流程控制
go 中循环语法如下

for i:=0;i<9;i++{
}

go中利用短变量声明:=来指定变量的类型,有点类似于C++中的auto ,注意到循环参数没有括号,循环体的第一个{必须接在循环参数后面,而再C++中该声明如下:

for(int i=0;i<9;i++){}

go 中判断语句如下:

if v:=math.Pow(x,n);v<lim{
        return v
    }

go 中厉害的是可以在判断参数里面定义判断的变量再接上判断的条件,在C++中是做不到在判断条件体内声明变量的。
go 中的swich case 和C++中没啥区别。
go 中没有while 语句,go 中的while 用for 来代替了

for true{
}

5:类和对象
go 中似乎是没有类和对象这个语法的,但是我们依然能用go来完成一些面向对象的设计。go中的类由struct 和方法来实现,结构体中保存数据,其中首字母大写位公有,首字母小写为私有。每个方法和相应的struct绑定来完成面向对象的设计。例如下面的代码:

type Vertex struct{
    X,Y float64
}
func (v Vertex) abs(i float64) float64{
    return math.Sqrt(v.X*v.X+v.Y*v.Y+i)
}

在该代码中声明一个Vertex 类型的结构体,然后为这个结构体绑定abs 方法,该方法同时也可以传递参数进去。那么怎样利用这个特性完成面向对象的设计呢?

type Human struct {
    name string
    age int
    phone string
}

type Student struct {
    Human // 匿名字段
    school string
}

type Employee struct {
    Human // 匿名字段
    company string
}

// 在 human 上面定义了一个 method
func (h *Human) SayHi() {
    fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone)
}

func main() {
    mark := Student{Human{"Mark", 25, "222-222-YYYY"}, "MIT"}
    sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"}

    mark.SayHi()
    sam.SayHi()
}

在该代码中,可以类似的认为Student 和Human继承了Human,从而可以通过Student来调用Human绑定的方法。同样,我们也可以重写SayHi()方法。
6:指针
在go 中也是有指针的,go 中指针的声明方法如下:

i * int

值得注意的是,和C++不同,go 中的指针是不能进行运算的。
以上就是总结的几个简单的不同点,以后有想到的再补充。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容