Golang 中array、map、slice区别与用法

Jackey Golang 4,425 次浏览 , , , 没有评论

array

  1. package main
  2.  
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. )
  7.  
  8. func test(data [2]string) {
  9. data[0] = "python"
  10. }
  11.  
  12. func main() {
  13. var testArray = [2]string{
  14. "php",
  15. "java",
  16. }
  17. v, _ := json.Marshal(testArray)
  18. fmt.Println(string(v))
  19. test(testArray)
  20. v2, _ := json.Marshal(testArray)
  21. fmt.Println(string(v2))
  22. }

运行结果:

  1. ["php","java"]
  2. ["php","java"]

map

  1. package main
  2.  
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. )
  7.  
  8. func test(data map[string]string) {
  9. data["1"] = "python"
  10. }
  11.  
  12. func main() {
  13. var testMap = map[string]string{
  14. "1": "php",
  15. "2": "java",
  16. }
  17. v, _ := json.Marshal(testMap)
  18. fmt.Println(string(v))
  19. test(testMap)
  20. v2, _ := json.Marshal(testMap)
  21. fmt.Println(string(v2))
  22. }

运行结果:

  1. {"1":"php","2":"java"}
  2. {"1":"python","2":"java"}

slice

  1. package main
  2.  
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. )
  7.  
  8. func test(data []string) {
  9. data[0] = "python"
  10. }
  11.  
  12. func main() {
  13. var testSlice = []string{
  14. "php",
  15. "java",
  16. }
  17. v, _ := json.Marshal(testSlice)
  18. fmt.Println(string(v))
  19. test(testSlice)
  20. v2, _ := json.Marshal(testSlice)
  21. fmt.Println(string(v2))
  22. }

运行结果:

  1. ["php","java"]
  2. ["python","java"]

总结

  1. array 为值类型,这意味着当数组变量被赋值时,将会获得原数组的拷贝。新数组中元素的改变不会影响原数组中元素的值。
  2. slice、map 为引用类型,这意味着当元素被改变时,slice、map中元素的值会跟随改变。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Go