Go语言基础知识 | 青训营
变量
变量类型:
字符串、整型、浮点型、bool型;字符串是内置类型可以像整型一样进行相加拼接,比较大小等操作。
变量声明及初始化:
可以通过var 进行变量的声明,可以不给出类型,会自行推导变量的类型;也可以通过 := 来进行变量的声明和初始化。

常量
常量的声明通过const 来进行声明,常量没有固定类型,会通过上下文进行推导;常量在声明时必须进行初始化。
if else
if 后是没有括号的,如果写上括号,编辑器在保存时会自动去掉括号;其后必须有大括号并在同一行。else必须和大括号在同一行。

循环
只有for循环
for循环
for循环和C的风格相似,可以使用break、continue。循环语句和if 相同,没有括号,且大括号必须和语句在同一行。这里只有i++而没有++i,go语言不支持前置自增

switch
在C/C++中每条case语句后都要跟break,否则会跑完所有分支,但在go语言中不会。switch中可以使用任意变量类型,可以在switch后不加任何变量,直接在case里写条件分支。

数组
数组的使用和C/C++相同,由于是定长的,一般不使用数组来进行开发,而是使用切片

切片
使用make来创建一个切片,切片可以和数组一样去存储值和取值,也可以通过append来追加元素。使用append时,必须把append的结果赋值给原切片,因为append在追加可能会出现扩容,这时的存储位置会发生改变。使用make创建切片时可以指定大小,也可以使用copy来进行切片间的拷贝。切片也可以访问区间元素,区间值不是下标是第几个元素,不包括头元素使用不写的话代表切片头或者尾。


map
同样使用make进行mao的构建,中间括号内是关键码的类型,之后跟的是存储的值类型。可以通过中括号关键码找到该存储的值并进行修改,通过delete删除kv对。在通过中括号获取值时,可以在后面加上一个变量,其值为bool类型用来判断map中是否存在这样的关键码。其遍历是按照关键码从小到大进行的。


range
使用range来遍历切片或者map,对于遍历切片,返回的第一个值为下标,第二个值为元素本身;遍历map时,第一个值为关键码,第二个值为元素本身。

函数和指针
函数的参数是变量名在前类型在后,且可以有多个返回值。指针多用于对传入函数的参数进行修改。
结构体及其方法
使用type来进行结构体的声明,并使用结构体名来初始化结构体变量。结构体方式则是在函数名前加上该结构体的变量声明。

错误处理
go语言一般将函数的错误码以返回值形式进行传递。

字符串格式化
使用fmt包中的Println函数输出结果并带有换行, 而Printf函数则类似与C/C++中的printf函数,但go语言中的Printf可以使用%v来打印任意类型字符。使用%+v打印详细内容,而%#v则会更加详细。对于Printf其他的使用方式类似C/C++的printf。
JSON处理
将结构体的每一个字段的第一个字母进行大写,就可以使用json.Marshal将结构体变量进行序列化为数组,该数组在打印时需要进行强转为string类型,否则会打印十六进制的编码;也可以使用json.Unmarshal进行反序列化到该结构体类型的变量中。想要在输出时字段为小写,只需要在结构体设计时,在其后加上json:"小写字段" 就可以了。
时间处理
经常使用time.Now()获取当前时间,也可以使用time.Date()构建一个时间,通过.Year()、.Month()、.Day()、.Hour()等获取,还可以使用.Sub对两个时间进行减法。
数字解析
对数字和字符串进行解析时使用到strconv包,使用ParseInt()将字符串解析为数字,第一个参数为字符串,第二个参数为进制,第三个参数为返回数字的位大小。
进行信息
通过os.Args来获取进程在执行时的命令行参数,使用os.Getenv()来获取环境变量,使用os.Setenv()来写入环境变量,还可以通过exec.Command().CombinedOutput()来快速启动子进程并获取其输入输出。