这是我参与「第三届青训营 -后端场」笔记创作活动的的第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跳出。