这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
Go语言优势
- 高性能、高并发
- 语法简单
- 丰富的标准库
- 跨平台
- 快速编译
- 垃圾回收
数组(Array)
- [N]T,N表示数组的长度,T表示数组的元素类型,比如[10]int
- 数据声明时未显式初始化的元素会隐式初始化为类型对应的0(如数字0、空字符串、false等)。
package main
import "fmt"
func main() {
var a [5]int
a[4] = 100
fmt.Println("get:", a[2])
fmt.Println("len:", len(a))
b := [5]int{1, 2, 3, 4, 5}
fmt.Println(b)
var twoD [2][3]int
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
twoD[i][j] = i + j
}
}
fmt.Println("2d: ", twoD)
}
切片(Slice)
- 使用make初始化
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]
}
Map
- 可用delete删除元素
- 也用make初始化
- 不是并发安全的
指针
go语言指针不同与C或C++中的指针,支持的操作很有限。一个主要用途就是对于传入参数进行修改。这个函数试图把一个变量+2。但是单纯像上面这种写法其实是无效的。因为传入函数的参数实际上是一个拷贝,那也说这个+2,是对那个拷贝进行了+2, 并不起作用。如果我们需要起作用的话,那么我们需要把那个类型写成指针类型,那么为了类型匹配,调用的时候会加一个 & 符号。
结构体(Struct)
- struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套其他结构体,也可以定义方法。
- 封装性:字段首字母大写包外可访问、小写包外不可访问
- 继承:用聚合实现继承(把父类放到子类里)
- tag:定义特定格式中的形式或约束条件
结构体方法
在 Go里面可以为结构体去定义一些方法。checkPassword 的实现,从一个普通函数,改成了 结构体方法。 这样用户可以 像 a.checkPassword(“xx”) 这样去调用。具体的代码修改,就是把第一个参数,加上括号,写到函数名称前面。 在实现结构体的方法的时候也有两种写法,一种是带指针,一种是不带指针。带指针,就可以对这个结构体去做修改。如果不带指针,实际上操作的是一个拷贝,无法对结构体进行修改。
\