这是我参与「第五届青训营 」伴学笔记创作活动的第1天
一、重点内容:
- 本次主要学习了go语言的基础语法和标准库,除了基础的循环、判断等语法知识,还包括切片、map、指针、函数、结构体和JSON序列化等标准库函数大的运用。
二、详细知识点介绍:
- 基础语法
- go语言的基础语法和C++很像,熟悉C++的朋友只要了解变量的定义和语法规则后能较快的上手。
- 需要注意的是,go的switch功能强于C++,它可以使用任意的变量类型,并且不加break不会继续跑完所有的case。
- 切片
- 切片的原理是储存了一个长度和一个容量以及一个指向数组的指针,类似与python,只不过不支持负数索引。
- 结构体和结构体方法
- go的结构体定义和C++类似,都是带类型的字段集合;而结构体方法类似于类的成员函数,调用方法也类似,只是在语言定义上有所区别。
- 错误处理
- 错误处理一般采用单独的返回值来传递错误信息,包含在errors包中。go的这种处理方式,可以清晰地表明哪个函数返回错误,并且可以简单地用if-else来处理。
- 注意在没有错误地时候,error的值是nil。
- JSON序列化
- encoding/json包中定义了很方便的序列化方法——Marshal。
- 对于一个已有的结构体,只要保证字段的首字母是大写即可序列化成为一个json字符串,同时也能反序列化回来。
- 对于字段还可以用json tag等方法来修改输出结果。
- 进程信息
- 需要引入os包,可以得到程序执行的一些参数、路径、环境变量等。
三、实践练习例子:
这里只举一个example,对于基础语法足够了,像结构体、序列化等知识还需要自己去尝试使用后方能进一步熟悉
package main
import "fmt"
func main() {
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
fmt.Println("len:", len(s)) // 3
s = append(s, "d")
s = append(s, "e", "f")
fmt.Println(s) // [a b c d e f]
c := make([]string, len(s))
copy(c, s)
fmt.Println(c) // [a b c d e f]
fmt.Println(s[2:5]) // [c d e]
fmt.Println(s[:5]) // [a b c d e]
fmt.Println(s[2:]) // [c d e f]
good := []string{"g", "o", "o", "d"}
fmt.Println(good) // [g o o d]
}
四、课后个人总结:
- 基础语法还是要靠自己多看多练,孰能生巧。
- 需要注意一些不同语言之间的差异,不能混淆,比如go中的switch不用break也不会再往下执行,切片冒号前的数字代表下标,冒号后代表结束的下标,但是不包含后者本身等。
- go语言的包功能很强,需要自己在实践中熟悉和掌握。用好了包能起到事半功倍的效果。