Go语言容器
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语言容器的更多相关文章
- 03. Go 语言容器
Go语言容器(container) 变量在一定程度上能满足函数及代码要求.如果编写一些复杂算法.结构和逻辑,就需要更复杂的类型来实现.这类复杂类型一般情况下具有各种形式的存储和处理数据的功能,将它们称 ...
- (二)羽夏看C语言——容器
写在前面 由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...
- C语言如何实现继承及容器
继承的概念 继承是面向对象软件技术当中的一个概念,与多态.封装共为面向对象的三个基本特征.继承可以使得子类具有父类的属性和方法或者重新定义,追加属性和方法. 面向对象中的重要概念就是类,在我们熟知的编 ...
- Go语言目录
为什么学习Go语言 第一章 环境搭建 Windows搭建Go语言环境 第二章 Go语言基础 Go语言介绍 Go语言命名 Go语言内置类型和函数 Go语言特殊函数介绍 Go语言运算符 第三章 Go语言程 ...
- 08. Go 语言包(package)
Go 语言包(package) Go 语言的源码复用建立在包(package)基础之上.Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,必须同 ...
- GO:go语言介绍
什么是go语言 Google开源 编译型语言 21世纪的C语言 go开发团队: go的特点 语法简洁 开发效率高 执行性能好 发展现状 最近新兴的行业公司一般会使用go语言作为主要开发语言 容器虚拟化 ...
- (五)羽夏看C语言——结构体与类
写在前面 由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...
- (一)羽夏看C语言——简述
"羽夏看C语言"介绍什么 本系列从汇编的角度,比较翔实的介绍C语言.C++和C其实是一样的东西,C++的编译器只是更强大,更能帮助我们写代码,例如模板.没有特殊说明,本系列不会 ...
- Owasp Top 10 Security Risks for 2014
A1-互联网泄密事件/撞库攻击 以大量的用户数据为基础,利用用户相同的注册习惯(相同的用户名和密码),尝试登陆其它的网站.2011年,互联网泄密事件引爆了整个信息安全 界,导致传统的用户+密码认证的方 ...
随机推荐
- PHP性能之语言性能优化:安装VLD扩展——检测性能
使用Linux命令安装 //下载安装包 wget http://pecl.php.net/get/vld-0.14.0.tgz //解压包 tar zxvf vld-0.14.0.tgz //进入编译 ...
- Java并发艺术-CAS
前言 CAS(Compare and Swap),即比较并替换,实现并发算法时常用到的一种技术,Doug lea大神在java同步器中大量使用了CAS技术,鬼斧神工的实现了多线程执行的安全性. CAS ...
- 8.7 正确使用索引(no)
一 索引未命中 并不是说我们创建了索引就一定会加快查询速度,若想利用索引达到预想的提高查询速度的效果,我们在添加索引时,必须遵循以下问题 1 范围问题,或者说条件不明确,条件中出现这些符号或关键字:& ...
- PHP(十)字符串
- 装饰者模式及C++实现
装饰者模式 时常会遇到这样一种情况,我已经设计好了一个接口,并且也有几个实现类,但是这时我发现我设计的时候疏忽了,忘记了一些功能,或者后来需求变动要求加入一些功能,最简单的做法就是修改接口,添加函数, ...
- 2016-2017-2 20155223 实验二 《Java面向对象程序设计》
2016-2017-2 苏黄永郦 实验二 实验报告 前期准备工作--程序安装 -问题一 开始的时候我就在老师博客的指导下安装IDEA插件JUnit Generator V2.0.当然我的IDEA肯定没 ...
- 转:Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数
public IEnumerable<Statistic> GetStatistics(IEnumerable<Guid> itemIds) { var ctx = new D ...
- java性能分析工具 jconsole.exe
通过 Java visualMv结合 jconsole.exe 工具即可查看如图所示(Jconsole在JDK文件夹内,非JRE文件夹) 在Java Visualvm工具里面安装JTA插件,分析线 ...
- cocos2dx常见Action(转)
本文转载自:http://blog.csdn.net/ff313976/article/details/23667209 bool HelloWorld::init(){ ////////////// ...
- 比较git commit 两个版本之间次数
#!/bin/bash f1="$1*" f2="$2*" echo "第一个版本:"$f1 echo "第二个版本:" ...