这是我参与「第五届青训营 」笔记创作活动的第4天
基础语法
映射
映射map在别的编程语言中可能叫做哈希、字典。map是实际使用中使用最频繁的数据结构。
我们可以用make去创建一个空map。
这里声明了一个key为string类型,value为int类型的map。
m := make(map[string]int)
下面是初始化map里的值
m2 := map[string]int{"one": 1, "two": 2}
var m3 = map[string]int{"one": 1, "two": 2}
fmt.Println(m2, m3)
下面是用方括号语法写入和读取kv对(key, value)
m["one"] = 1
m["two"] = 2
fmt.Println(m) // map[one:1 two:2]
fmt.Println(len(m)) // 2
fmt.Println(m["one"]) // 1
fmt.Println(m["unknow"]) // 0
可以通过delete删除kv对
delete(m, "one")
在map里去读取kv对的时候我们可以后面加一个ok(一个布尔值),来获取这个map里有没有这个key存在
r, ok := m["unknow"]
fmt.Println(r, ok) // 0 false
在Golang中map是完全无序的,不是按字典序,也不会按插入顺序输出,而是一个偏随机的顺序
range
对于一个slice或者map我们可以用range来快速遍历,这样代码能够更加简洁。对于数组,会返回两个值,第一个值是索引,第二个值是对应位置的值。对于map,第一个值是key,第二个值是value。
nums := []int{2, 3, 4}
sum := 0
for i, num := range nums {
sum += num
if num == 2 {
fmt.Println("index:", i, "num:", num) // index: 0 num: 2
}
}
fmt.Println(sum) // 9
m := map[string]string{"a": "A", "b": "B"}
for k, v := range m {
fmt.Println(k, v) // b B; a A
}
for k, v := range m {
fmt.Println("key", k) // key a; key b
}
函数
这是Golang里最简单的实现两个变量相加的函数
func add(a int, b int) int {
return a + b
}
func add(a, b int) int {
return a + b
}
Golang里函数变量类型也是后置的。在实际的业务逻辑代码里面,很多函数都返回多个值,第一个是真正的返回结果,第二个是错误信息。
func exists(m map[string]string, k string) (v string, ok bool) {
v, ok = m[k]
return v, ok
}
func main( ) {
res := add(1, 2)
fmt.Println(res) // 3
v, ok := exists(map[string]string{"a": "A"}, "a")
fmt.Println(v, ok) // A Ture
}