Golang中只有三种引用类型:slice(切片)、map(字典)、channel(管道);
引用类型
- 引用类型理解为(C语言):指针
值类型
- 值的拷贝
package main
import "fmt"
func main(){
a := [5]int{2, 3, 4, 5, 6} //定义一个数组
b := a
fmt.Println(a,b) //[2 3 4 5 6] [2 3 4 5 6]
b[2] = 77
fmt.Println(a,b) //[2 3 4 5 6] [2 3 77 5 6]
}
上述定义的数组,b是a 的值拷贝,b值改变不影响a
package main
import "fmt"
func main(){
a := []int{2, 3, 4, 5, 6} //切片
b := a
fmt.Println(a, b) //[2 3 4 5 6] [2 3 4 5 6]
b[2] = 77
fmt.Println(a, b) // [2 3 77 5 6] [2 3 77 5 6]
}
上述定义的切片,b是a 的引用, b值改变a
package main
import "fmt"
func main(){
a := map[string]string{
"01": "i am 01",
"02": "i am 02",
"03": "i am 03",
}
b := a
fmt.Println(a, b) //map[02:i am 02 03:i am 03 01:i am 01] map[03:i am 03 01:i am 01 02:i am 02]
b["02"] = "i am b"
fmt.Println(a, b) //map[01:i am 01 02:i am b 03:i am 03] map[01:i am 01 02:i am b 03:i am 03]
网友评论