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 指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值