go语言基础语法(和c++对比)|青训营笔记

197 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。

本人是第一次接触go语言,之前主要是用的c++。这篇文章主要是记录go语言的一些基础语法,尤其是和c++有区别的地方,如有错误还望各位大神指正。

一、go基础变量

1.变量声明

不像c++需要为变量声明具体类型,go可以使用var关键字声明任意类型的变量,编译器会在变量使用的时候自动推导其类型。当然,如果想要指定具体类型,可以通过后置声明的方法来指出,例如:

var x int=1

值得注意的是,go中函数的返回值的类型也是后置声明的。

另一种声明变量的方法是使用":="直接声明并初始化,例如:

x:=1

需要注意的是,在go中nil没有具体的类型,在此不能用nil初始化变量(编译器无法推导变量类型)。

常量的声明直接将var替换成const。

2.数组

和c++无太大区别。

var a [5]int

可以通过len(a)得到数组的大小。

3.切片

切片slice相当于可变长度的数组,类似c++中的vector。

使用make来初始化切片,例如:

s:=make([]string,3)

使用append向末尾添加元素,例如:

s=append(s,"d")

和c++中的vector一样,切片的内存不够时会自动扩容,但是go中需要通过重新赋值的方式来添加元素。

4.哈希表

go中的map即哈希表,表中内容是无序的,类似于c++中的unordered_map。

可以通过make来声明一个map,例如:

m:=make(map[string]int)

若想声明类似c++中的集合unordered_set,可以将值声明为空结构体,在go中,空结构体不占内存。

5.函数

go中函数可返回多个类型,一般第二个返回错误类型。

6.结构体

在go中可以通过键值对的方法初始化结构体,例如:

type user struct{
    name string
    password string
}
a:=user{name:"zhangsan",password:"123456"}

不同于c++中需要在结构体内声明成员方法,go中可以在结构体外声明结构体函数:

func (u user) checkPassword(password string) bool{
    return u.password==password
}

二、语法

1.条件判断语句

if后的判断条件无括号,且必须接大括号

if 7%2==0 {
    fmt.Println("7 is even")
}

2.循环语句

只有for循环,没有while,且无括号

3.选择语句

switch后同样无括号,且每个case后不需要加break跳出。

暂时先写这些吧,后续也会慢慢补充。