这是我参与第五届青训营伴学笔记创作活动的第1天。通过第一节课程的学习,我了解了GO语言的语言特性、go的环境安装以及go的基础语法。
go语言特性
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
go语言环境安装
访问 go.dev/ ,点击 Download ,下载对应平台安装包,安装即可 如果访问 github 速度比较慢,配置 go环境变量proxy为goproxy.cn/ 。
go语言基础语法
变量
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
- 第一种,指定变量类型,如果没有初始化,则变量默认为零值。例如,
var x int。 - 第二种,根据值自行判定变量类型。例如
var s = "hello world"。 - 第三种,使用
:=。如果变量已经使用 var 声明过了,再使用:=声明变量,就产生编译错误。
if else
go语言里面的if else写法和C或者C++类似。不同点是if后面没有括号。如果你写括号的话,那么在保存的时候你的编辑器会自动把你去掉。第二个不同点是go里面的if,它必须后面接大括号,就是你不能像C或者C++ 一样,直接把if里面的语句同一行。
循环语句
go里面没有while循环、do while循环,只有唯一的for循环。最简单的for循环就是在for后面什么都不写,代表一个死循环。循环途中你可以用break跳出。在循环里面,你可以用break或者continue来跳出或者继续循环,
switch
不需要break。可以用来取代任意的if else语句。可以在switch后面不加任何的变量,然后在case里面写条件分支。这样代码相比你用多个if else代码逻辑会更为清晰。
数组
数组就是一个具有编号且长度固定的元素序列。比如[5]int是一个可以存放5个int元素的数组。 对于一个数组,可以很方便地取特定索引的值或者往特定索引取存储值,然后也能够直接去打印一个数组。不过,在真实业务代码里面,我们很少直接使用数组,因为它长度是固定的,我们用的更多的是切片。
切片
go用make来创建一个切片, 可以像数组一样去取值,使用append来追加元素。
map
我们可以用make来创建一个空 map,这里会需要两个类型,第一个是那个key的类型,这里是string另一个是value 的类型。可以从里面去存储或者取出键值对。可以用delete从里面删除键值对。
range
range遍历的时候,对于数组会返回两个值,第一个是索引,第二个是对应位置的值。
函数
函数声明告诉了编译器函数的名称,返回类型,和参数。Go 语言标准库提供了多种可动用的内置的函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度。如果我们传入的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的元素个数。
指针
Go 语言的取地址符是&,放到一个变量前使用就会返回相应变量的内存地址。
go里面也支持指针。指针的一个主要用途就是对于传入参数进行修改。
结构体
结构体的话是带类型的字段的集合。我们可以用结构体的名称去初始化一个结构体变量,构造的时候需要传入每个字段的初始值。也可以用这种键值对的方式去指定初始值,这样可以只对一部分字段进行初始化。
结构体方法
在实现结构体的方法的时候也有两种写法,一种是带指针, 一种是不带指针。这个它们的区别的话是说如果你带指针的话,那你那么你就可以对这个结构体去做修改。如果你不带指针的话,那你实际上操作的是一个拷贝, 你就无法对结构体进行修改。
错误处理
o 语言通过内置的错误接口提供了非常简单的错误处理机制。
error类型是一个接口类型,它的定义中包含一个Error() string方法
函数通常在最后的返回值中返回错误信息。
字符串操作
在标准库string包里面有很多常用的字符串工具函数,比如contains判断个字符串里面是否有包含另个字符串 ,count 字符审计数,index 查找某个字符审的位置。join 连接多个字符串。
字符串格式化
标准库的FMT包里面有很多的字符串格式相关的方法,比如prinf这个类似于C语言里面的printf 函数。不同的是,在go语言里面的话, 你可以很轻松地用%v来打印任意类型的变量,而不需要区分数字符串。也可以用%+v打印详细结果,%#v则更详细。
json操作
对于一个已有的结构体,我们可以什么都不做,只要保证每个字段的第一个字母是大写,也就是是公开字段。那么这个结构体就能用JSON.marshaler去序列化,变成一个JSON的字符串。序列化之后的字符串也能够用JSON.Unmarshal去反序列化到一个空的变量里面。这样默认序列化出来的字符串的话,它的风格是大写字母开头,而不是下划线。
时间处理
在go语言里面最常用的就是time.Now()来获取当前时间,然后你也可以用time.Date()去构造一个带时区的时间, 构造完的时间。上面有很多方法来获取这个时间点的年月日 小时分钟秒,然后也能用.sub()去对两个时间进行减在和某些系统交互的时候,我们经常会用到时间戳。可以用.UNIX来获取时间戳time.format()、 time.Parse()
数字解析
符串和数字之间的转换。在go语言当中,关于字符串和数字类型之间的转换都在strconv这个包下。
实战
猜字谜
在线词典
请求字段较多,可以先复制请求为CURL,粘贴到Convert curl to Go (curlconverter.com)生成代码。