在函数间传递映射

在函数间传递映射并不会制造出该映射的一个副本。实际上,当传递映射给一个函数,并对这个映射做了修改时,所有对这个映射的引用都会察觉到这个修改:

  1. package main
  2. import "fmt"
  3. func main() {
  4. // 创建一个映射,存储颜色以及颜色对应的十六进制代码
  5. myColors := map[string]string{
  6. "AliceBlue":"#f0f8ff",
  7. "Coral":"#ff7F50",
  8. "DarkGray":"#a9a9a9",
  9. "ForestGreen": "#228b22",
  10. }
  11. // 显示映射里的所有颜色
  12. for key, value := range myColors {
  13. fmt.Printf("Key: %s Value: %s\n", key, value)
  14. }
  15. fmt.Println()
  16. // 调用函数来移除指定的键
  17. removeColor(myColors, "Coral")
  18. // 显示映射里的所有颜色
  19. for key, value := range myColors {
  20. fmt.Printf("Key: %s Value: %s\n", key, value)
  21. }
  22. }
  23. // removeColor 将指定映射里的键删除
  24. func removeColor(colors map[string]string, key string) {
  25. delete(colors, key)
  26. }

运行上面的程序,输出如下结果:

  1. Key: Coral Value: #ff7F50
  2. Key: DarkGray Value: #a9a9a9
  3. Key: ForestGreen Value: #228b22
  4. Key: AliceBlue Value: #f0f8ff
  5. Key: AliceBlue Value: #f0f8ff
  6. Key: DarkGray Value: #a9a9a9
  7. Key: ForestGreen Value: #228b22

可以看到,在调用了 removeColor 函数后,main 函数中引用的映射中也不再有 Coral 颜色了。这个特性和切片类似,保证可以用很小的成本来复制映射。