怎么做自己的一个网站,网站跳出率高还是低,试用网站 建站,网站建设公司利润怎么样概述 在上一节的内容中#xff0c;我们介绍了Go的结构体#xff0c;包括#xff1a;定义结构体、声明结构体变量、使用结构体、结构体关联函数、new、组合等。在本节中#xff0c;我们将介绍Go的映射。Go语言中的映射#xff08;Map#xff09;是一种无序的键值对集合我们介绍了Go的结构体包括定义结构体、声明结构体变量、使用结构体、结构体关联函数、new、组合等。在本节中我们将介绍Go的映射。Go语言中的映射Map是一种无序的键值对集合使用关键字map来声明并使用键和值类型作为参数。它是一个用于存储一系列无序的键值对的集合基于键来存储值键就像索引一样指向与该键关联的值。 映射被创建和初始化后可以通过指定适当类型的键并给这个键赋一个值来为映射赋值每个键必须是唯一的。另外映射是可变的可以在已有的键值对基础上添加新的键值对。Go语言中映射的实现使用哈希表因此它的操作是非常快速的。然而由于映射是无序的即使使用同样的顺序保存键值对每次迭代映射的时候顺序也有可能不一样。 声明映射 在Go语言中映射的声明使用map关键字并指定键和值的类型。以下是声明映射的语法 var m map[keyType]valueType 其中keyType表示键的类型valueType表示值的类型。比如要声明一个将字符串作为键、整数作为值的映射可以参考下面的示例代码。
var m map[string]int 初始化映射 声明映射时可以直接添加初始键值对可参考下面的示例代码。
package mainimport fmtfunc main() {mapWebsite : map[string]int{CSDN: 66,GitHub: 88,}// 输出map[CSDN:66 GitHub:88]fmt.Println(mapWebsite)
} 当然也可以使用make函数来初始化映射。在下面的示例代码中我们通过make函数创建了一个空的映射可以在后续的代码中通过使用赋值操作来添加键值对。
package mainimport fmtfunc main() {mapWebsite : make(map[string]int)// 输出map[]fmt.Println(mapWebsite)
} 注意映射是引用类型使用make函数分配的是一个引用后续对映射的修改会影响到原始的映射对象。 操作映射 声明映射后我们可以向映射中添加新的键值对也可以访问和修改映射中的值。具体用法可参考下面的示例代码。
package mainimport fmtfunc main() {mapWebsite : make(map[string]int)// 添加新的键值对mapWebsite[CSDN] 66mapWebsite[GitHub] 88// 输出map[CSDN:66 GitHub:88]fmt.Println(mapWebsite)// 访问键对应的值输出88fmt.Println(mapWebsite[GitHub])mapWebsite[CSDN] 99// 修改键对应的值输出99fmt.Println(mapWebsite[CSDN])
} 另外我们可以使用len()函数获取映射的长度使用delete()函数删除某个键值对。
package mainimport fmtfunc main() {mapWebsite : map[string]int{CSDN: 66,GitHub: 88,}// 输出2fmt.Println(len(mapWebsite))delete(mapWebsite, GitHub)// 输出1fmt.Println(len(mapWebsite))
} 可以使用如下方式检查键是否存在于映射中value, ok : mapName[key]。其中mapName是映射的变量名key是要检查的键。如果key存在于mapName中那么value将是对应的值并且ok将置为true否则value将是零值并且ok将置为false。
package mainimport fmtfunc main() {mapWebsite : map[string]int{CSDN: 66,GitHub: 88,}value, ok : mapWebsite[CSDN]if ok {// 输出existed: 66fmt.Printf(existed: %d\n, value)} else {fmt.Println(not exist)}
} 要遍历map我们可以使用range关键字。当遍历map时range会返回两个值键和对应的值。具体用法可参考下面的示例代码。
package mainimport fmtfunc main() {mapFruit : make(map[string]int)mapFruit[Apple] 66mapFruit[Banana] 88mapFruit[Orange] 99/* 遍历map输出Apple 66Banana 88Orange 99*/for key, value : range mapFruit {fmt.Println(key, value)}
}