跟我一起学Golang:Map

概念

Golang一种内置结构,形式<key,value>,类似Java中的HashMap或者Python中的dict(字典)。其中key是可比较的,不能为slice,因为slice没有实现比较操作。另外需要注意一点就是map是引用类型,作为参数存在副作用。

操作以及例子

如何创建

使用make,语法格式:make(map[key-type]val-type)

可以在声明的时候初始化:map[key-type]val-type{key:value, ...}

如何修改

赋值:name[key]=val

删除: delete(name, key)

如何访问

直接使用下标:name[key]

带有校验型: val, ok := name[key], ok是false表示key对应的值不存在

例子:

// Maps are Go's built-in associative data type(sometimes called hashes or dicts in other languages)

package main

import "fmt"

func main() {

  // to create an empty map, use the builtin make: make(map[key-type]val-type)

  m := make(map[string]int)

  // set key/value pairs using typical name[key]=val syntax

  m["k1"] = 7

  m["k2"] = 13

  // Printing a map with e.g. fmt.Println will show all of its key/value pairs.

  fmt.Println("map:", m)

  // Get a value for a key with name[key]

  v1 := m["k1"]

  fmt.Println("v1:", v1)

  // the builtin le returns the numbers of key/value pairs when called on a map

  fmt.Println("len:", len(m))

  // the builtin delete removes key/value pairs from a map

  delete(m, "k2")

  fmt.Println("map:", m)

  /**

  * the optional second return value when getting a value from a map

  * indicates if the key was present in the map. This can be used to dismbiguate between missing keys

  * and keys with zero values like 0 or "". Here we didn't need the value itself, so we ignored it with

  * the blank identifer _.

  **/

  _, prs := m["k2"]

  fmt.Println("prs:", prs)

  if !prs {

    fmt.Println("m[\"k2\"] is not exist.")

  }

  // you can also decalre and initialize a new map in the same line with this syntax

  n := map[string]int{"foo": 1, "bar": 2}

  fmt.Println("map:", n)

}

参考资料

https://golang.google.cn/doc/effective_go.html#maps

https://gobyexample.com/maps

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容