map
m := make(map[string]int)
m["zhangsan"] = 22
m["lisi"] = 44
fmt.Println("map: ", m)
v1 := m["zhangsan"]
fmt.Println("v1: ", v1)
delete(m, "zhangsan")
fmt.Println("map: ", m)
clear(m)
fmt.Println("map: ", m)
_, prs := m["zhangsan"]
fmt.Println("prs: ", prs)
n1 := map[string]int{"zhangsan": 22, "lisi": 44}
n2 := map[string]int{"zhangsan": 22, "lisi": 44}
if maps.Equal(n1, n2) {
fmt.Println("n1 == n2")
} else {
fmt.Println("n1 != n2")
}
# 运行结果
map: map[lisi:44 zhangsan:22]
v1: 22
map: map[lisi:44]
map: map[]
prs: false
n1 == n2
注意定义map 初始化的时候
一个是使用 make make(map[string]int) 另一个是直接使用 map[string]int{“zhangsan”:22, “lisi”:44}
一个函数返回多个值
func a2() (int, int) {
return 3, 6
}
main(){
a, b := a2()
fmt.Println(a, b, "a + b = ", a+b)
_, c := a2()
fmt.Println(c)
}
# 运行结果
3 6 a + b = 9
6
variadic function 可变参函数
// 和c/c++ 一样 也是 用... 表示可变参数
// 参数 ... 参数类型
func a3(nums ...int) {
fmt.Println(nums, " ")
tatal := 0
for _, num := range nums {
tatal += num
}
fmt.Println(tatal)
}
func main(){
a3(1, 2, 3, 4, 5)
# 运算结果
[1 2 3 4 5]
15
递归
go 中闭包也可以递归,但是需要先用 var 声明
func a4(a int) int {
if a == 0 {
return 1
}
return a * a4(a-1)
}
func main(){
fmt.Println("a4(5) :", a4(5))
var fib func(n int) int
fib = func(n int) int {
if n < 2 {
return n
}
return fib(n-1) + fib(n-2)
}
/*
4
3
2
1 ==>1
0 ==>0
1 ==> 1
2
1 ==>1
0 ==>0
*/
fmt.Println("the ans is ", fib(4))
}
# 运行结果
a4(5) : 120
the ans is 3