在函数间传递映射
在函数间传递映射并不会制造出该映射的一个副本。实际上,当传递映射给一个函数,并对这个映射做了修改时,所有对这个映射的引用都会察觉到这个修改:
package mainimport "fmt"func main() {// 创建一个映射,存储颜色以及颜色对应的十六进制代码myColors := map[string]string{"AliceBlue":"#f0f8ff","Coral":"#ff7F50","DarkGray":"#a9a9a9","ForestGreen": "#228b22",}// 显示映射里的所有颜色for key, value := range myColors {fmt.Printf("Key: %s Value: %s\n", key, value)}fmt.Println()// 调用函数来移除指定的键removeColor(myColors, "Coral")// 显示映射里的所有颜色for key, value := range myColors {fmt.Printf("Key: %s Value: %s\n", key, value)}}// removeColor 将指定映射里的键删除func removeColor(colors map[string]string, key string) {delete(colors, key)}
运行上面的程序,输出如下结果:
Key: Coral Value: #ff7F50Key: DarkGray Value: #a9a9a9Key: ForestGreen Value: #228b22Key: AliceBlue Value: #f0f8ffKey: AliceBlue Value: #f0f8ffKey: DarkGray Value: #a9a9a9Key: ForestGreen Value: #228b22
可以看到,在调用了 removeColor 函数后,main 函数中引用的映射中也不再有 Coral 颜色了。这个特性和切片类似,保证可以用很小的成本来复制映射。
