这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天,这次课程我主要学习了GO语言的基本特点,基础语法,以及三个关于GO语言的实战应用:猜数游戏,在线词典,以及SOCKS5的应用。
1.GO语言的特点
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
GO语言原生就支持并发,并不需要第三方库的支持,并发执行效率很高。GO语言的语法和C一样简单,并且也具有JAVA的跨平台和垃圾回收的优点。
2.GO语言的基础语法
2.1变量
GO语言有多种变量声明方式,一般不用显式声明变量类型。
2.2 if else语句
GO语言的if else语句,不用写括号,但是{必须和if必须在同一行,代码如下:
if 7%2==0 {
do something
}
2.3 switch语句
GO语言的switch语句相较于C语言的区别:
- 不用写括号
- 变量不只是整型,还可以是结构体
- 每个case不用写break,默认就只执行case内部的代码
2.4 切片
切片是GO语言的重要特点,它相当于一个可变长的数组。左闭右开,与python的区别是不能负数索引。
slice 的原理实际上它存储了长度和容量,以及一个指向数组的指针,执行 append 操作的时候,如果容量不够的话,会扩容并且返回新的 slice。
2.5 map
map就相当于其他语言的哈希表。
2.6 结构体方法以及结构体函数
结构体函数相当于类成员函数,写法是:第一个参数,加上括号,写到函数名称前面
2.7 错误处理
不同于其他语言常用的try catch结构,GO的错误处理用的是err。所以一个函数通常返回2个值,第二个值是错误信息。
2.8 JSON处理
go语言里面的JSON操作非常简单,对于一个已有的结构体,我们可以什么都不做,只要保证每个字段的第一个字母是大写,也就是是公开字段。那么这个结构体就能用JSON.marshaler去序列化,变成一个 JSON 的字符串。序列化之后的字符串也能够用JSON.unmarshaler去反序列化到一个空的变量里面。
但是这样默认序列化出来的字符串的话,它的风格是大写字母开头,而不是下划线。我们可以在后面用 json tag 等语法来去修改输出 JSON 结果里面的字段名。