Go语言编程基础 结构体、切片与映射(五)(完结)——映射、函数值、闭包

17 映射

映射将键映射到值。
映射的零值为nil。nil映射既没有键,也不能添加键。

make函数会返回给定类型的映射,并将其初始化备用。

package main

import "fmt"

func main()  {
  var m map[string]int
  m = make(map[string]int)
  m["kk"] = 12
  m["gg"] = 11
  fmt.Println(m["kk"])
  fmt.Println(m)
  fmt.Printf("%T\n", m)
}

18 映射的文法

映射的文法与结构体类似,不过必须有键名。

package main
import "fmt"

type vvv struct {
  lll, ll float64
}

var m = map[string]vvv{
  "www":vvv{
    12.3,13.4,
  },
  "ppp":vvv{
    22.5, 33.7,
  },
}

func main() {
  fmt.Println(m)
}

若顶级类型只是一个类型名,可以在文法元素中省略。

19 修改映射

在映射m中插入或修改元素:

m[key] = elem

获取元素:

elem = m[key]

删除元素:

delete(m, key)

通过双赋值检测某个键是否存在:

elem, ok = m[key]

若key在m中,ok为true;否则,ok为false。
若key不在映射中,那么elem是该映射元素类型的零值。
当从映射中读取某个不存在的键时,结果为映射元素类型的零值。
若:elem或ok未声明,可以使用短变量声明:

elem, ok := m[key]
package main

import "fmt"

func main() {
  m := make(map[string]int)

  m["aaa"] = 42
  fmt.Println("The value:", m["aaa"])

  m["aaa"] = 48
  fmt.Println("The value:", m["aaa"])

  delete(m, "aaa")
  fmt.Println("The value:", m["aaa"])

  v, ok := m["aaa"]
  fmt.Println("The value:", v, "Present?", ok)
}

20 函数值

函数也是值,可以如同其他值一样传递。
函数值可以用作函数的参数或返回值。

package main

import "fmt"

func kkk(i func()){
  fmt.Println("kkkk")
  i()
}

func main()  {
  fff := func() { fmt.Println("fff") }
  kkk(fff)
}

21 函数的闭包

Go函数可以为闭包。闭包是一个函数值,它引用了函数体之外的变量。该函数可以访问并赋予其引用的变量的值,即,该函数被“绑定”在了这些变量上。

package main

import "fmt"

func main() {
  count := 0
  ff := func() {
    fmt.Println(count)
  }
  for i := 0; i < 10; i ++ {
    count++
    ff()
  }
}

学习源:Go 指南

猜你喜欢

转载自blog.csdn.net/qq_32165041/article/details/83863520