最近学习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 中的指针是不能进行运算的。
以上就是总结的几个简单的不同点,以后有想到的再补充。