Go语言基础4 | 青训营笔记

81 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第4天

基础语法

映射

映射map在别的编程语言中可能叫做哈希、字典。map是实际使用中使用最频繁的数据结构。 我们可以用make去创建一个空map。 这里声明了一个keystring类型,valueint类型的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

Golangmap是完全无序的,不是按字典序,也不会按插入顺序输出,而是一个偏随机的顺序

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
}