点击阅读更多查看文章内容
var与:=定义变量时如何分配地址空间
使用var声明变量时会为变量本身分配地址,但不会为变量指向的底层指针分配地址
使用:=初始化变量会为变量本身以及其指向的底层指针分配地址
这种区别主要体现在引用类型中(如切片、map、channel、指针等)
在值类型中
int/float/bool/string/struct 使用两个方法都没有区别,都会为变量分配地址
在引用类型中
切片:
1 2 3 4 5 6 7 8 9 10
| func main() { var a []int fmt.Println(a == nil) fmt.Printf("%p\n", &a) fmt.Printf("%p\n", a)
m2 := map[string]int{} fmt.Println(m2 == nil) m2["key"] = 10 }
|
map:
1 2 3 4 5 6 7 8 9
| func main() { var m map[string]int fmt.Println(m == nil) m["key"] = 10
m2 := map[string]int{} fmt.Println(m2 == nil) m2["key"] = 10 }
|
channel:
1 2 3 4 5 6 7 8
| func main() { var ch chan int fmt.Println(ch == nil) ch <- 1 ch2 := make(chan int, 1) fmt.Println(ch2 == nil) ch2 <- 1 }
|
指针:
1 2 3 4 5 6 7 8 9 10
| func main() { var p *int fmt.Println(p == nil) *p = 100 p2 := new(int) fmt.Println(p2 == nil) *p2 = 100 fmt.Println(*p2) }
|