Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

键必须是支持相等运算符 ("=="、"!=") 类型, 如 number、string、 pointer、array、struct,以及对应的 interface。

值可以是任意类型,没有限制。

定义 Map

第一种,声明一个Map:

var m map[int]string

Map定义并初始化

var m1 map[int]string = map[int]string{: "Linux", : "Python"}
var m2 = map[int]string{: "Java", : "Golang"}

第二种,通过make来创建Map

var m1 map[int]string = make(map[int]string, )
var m2 = make(map[int]string, )

第三种,通过 := 语法来定义Map

m1 := map[int]string{}
m2 := make(map[int]string, )

Map操作

插入操作:

package main

import "fmt"

func main() {
m := map[string]string{"key0": "Linux", "key1": "Python"}
fmt.Printf("插入前:map m : %v\n", m)
m["key2"] = "oldboy"
fmt.Printf("插入后:map m : %v\n", m)
}

更新操作:

package main

import "fmt"

func main() {
m := map[string]string{"key0": "Linux", "key1": "Python"}
fmt.Printf("更新前:map m : %v\n", m)
m["key1"] = "Golang"
fmt.Printf("更新后:map m : %v\n", m)
}

查找操作:

package main

import "fmt"

func main() {
m := map[string]string{"key0": "Linux", "key1": "Python"}
val, ok := m["key0"]
if ok {
fmt.Printf("查找操作:key0 => %v\n", val)
}
}

删除操作:

package main

import "fmt"

func main() {
    m := map[string]string{"key0": "Linux", "key1": "Python"}
    fmt.Printf("删除前:map m : %v\n", m)
    delete(m, "key1")
    fmt.Printf("删除后:map m : %v\n", m)
}

删除操作,如果 key 不存在,不会出错。

package main

import "fmt"

func main() {
m := map[string]string{"key0": "Linux", "key1": "Python"}
fmt.Printf("删除前:map m : %v\n", m)
delete(m, "key10")
fmt.Printf("删除后:map m : %v\n", m)
}

求长度:

package main

import "fmt"

func main() {
m := map[string]string{"key0": "Linux", "key1": "Python"}
len := len(m)
fmt.Printf("map m 长度: %v\n", len)
}

注意:不可以在map上使用cap()方法。

package main

import "fmt"

func main() {
m := map[string]string{"key0": "Linux", "key1": "Python"}
cap := cap(m)
fmt.Printf("map's cap is %v\n", cap)
}

编译错误:

./main.go::: invalid argument m (type map[string]string) for cap

Go语言容器的更多相关文章

  1. 03. Go 语言容器

    Go语言容器(container) 变量在一定程度上能满足函数及代码要求.如果编写一些复杂算法.结构和逻辑,就需要更复杂的类型来实现.这类复杂类型一般情况下具有各种形式的存储和处理数据的功能,将它们称 ...

  2. (二)羽夏看C语言——容器

    写在前面   由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...

  3. C语言如何实现继承及容器

    继承的概念 继承是面向对象软件技术当中的一个概念,与多态.封装共为面向对象的三个基本特征.继承可以使得子类具有父类的属性和方法或者重新定义,追加属性和方法. 面向对象中的重要概念就是类,在我们熟知的编 ...

  4. Go语言目录

    为什么学习Go语言 第一章 环境搭建 Windows搭建Go语言环境 第二章 Go语言基础 Go语言介绍 Go语言命名 Go语言内置类型和函数 Go语言特殊函数介绍 Go语言运算符 第三章 Go语言程 ...

  5. 08. Go 语言包(package)

    Go 语言包(package) Go 语言的源码复用建立在包(package)基础之上.Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,必须同 ...

  6. GO:go语言介绍

    什么是go语言 Google开源 编译型语言 21世纪的C语言 go开发团队: go的特点 语法简洁 开发效率高 执行性能好 发展现状 最近新兴的行业公司一般会使用go语言作为主要开发语言 容器虚拟化 ...

  7. (五)羽夏看C语言——结构体与类

    写在前面   由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...

  8. (一)羽夏看C语言——简述

    "羽夏看C语言"介绍什么   本系列从汇编的角度,比较翔实的介绍C语言.C++和C其实是一样的东西,C++的编译器只是更强大,更能帮助我们写代码,例如模板.没有特殊说明,本系列不会 ...

  9. Owasp Top 10 Security Risks for 2014

    A1-互联网泄密事件/撞库攻击 以大量的用户数据为基础,利用用户相同的注册习惯(相同的用户名和密码),尝试登陆其它的网站.2011年,互联网泄密事件引爆了整个信息安全 界,导致传统的用户+密码认证的方 ...

随机推荐

  1. [Selenium]点击下拉框之后,从下拉列表选择元素进行点击很容易失败

    点击下拉框之后,下拉列表会显示出来,但是有时候下拉列表会很快就消失掉,导致后面选择元素的时候会失败. 像这种情况,需要将鼠标移动到下拉列表上,使下拉列表维持显示,然后才选择元素进行点击. 将鼠标移动到 ...

  2. PHP(十)字符串

  3. string 转换为枚举对应的值

    public static Object Parse(Type enumType,string value) 例如:(Colors)Enum.Parse(typeof(Colors), "R ...

  4. Tomcat项目部署问题记录

    Tomcat项目部署问题记录 1. -bash: ./startup.sh: Permission denied 问题: 新装tomcat后,执行启动命令会出现 -bash: ./startup.sh ...

  5. oracle内部结构

    数据库管理系统将数据存储在磁盘.磁带以及其他的裸设备上,虽然这些设备的访问速度相比内存慢很多,但其非易失性和大容量的特点使他们成为数据存储的不二之选. 本文主要讨论大型数据库产品的磁盘存储内部结构,这 ...

  6. Android-有序广播明确指定接收者

    在上一篇博客,Android-有序广播是可以中断的,介绍了 有序广播是可以中断的,但还有一种例外情况:明确指定接收者的有序广播是无法中断的,一定会发送到指定的接收者 AndroidManifest.x ...

  7. Solr中的一些查询参数

    fl: 是逗号分隔的列表,用来指定文档结果中应返回的 Field 集.默认为 “*”,指所有的字段. defType: 指定query parser,常用defType=lucene, defType ...

  8. 浏览器兼容性随手记:Javascript

    1.event IE9以下不支持直接获取event对象,所以需要写兼容: var event = event?event:window.event; IE8以下不支持event.target,但是可以 ...

  9. js自执行函数、调用递归函数、圆括号运算符、函数声明的提升

    前言 起因是我要在jquery的ajax中需要根据返回值来决定是否继续发起ajax请求,这是一个有条件的循环,符合条件就跳出.可以使用while循环的,但是想了想还是递归调用好用. 调用递归函数 递归 ...

  10. ES6——Symbol数据类型

    什么是 Symbol ? Symbol 表示独一无二的值,他是js中的 第七种数据类型. 基本的数据类型:null, undefined number boolean string symbol 引用 ...