在Go中,我很困惑为什么可以获得像int这样的变量的内存地址而不是结构的内存地址。举个例子:
package main
import "fmt"
func main() {
stud1 := stud{"name1", "school1"}
a:=10
fmt.Println("&a is:", &a)
fmt.Println("&stud1 is:",&stud1)
}
输出是:
&a is: 0x20818a220
&stud1 is: &{name1 school1}
为什么& a给出了内存地址,但是& stud1没有给出确切的内存位置。我没有打算使用内存地址,但只是对不同的行为感到好奇。
答案 0 :(得分:6)
fmt
包使用反射来打印输出值,并且有一个特定的情况是将结构的指针打印为&{Field Value}
。
如果要查看内存地址,请使用指针格式化动词%p
。
fmt.Printf("&stud is: %p\n", &stud)