func main() {
var s = Stu{
name: "法外狂徒",
}
s.name = "法内狂徒"
(&s).name = "守法公民张三"
fmt.Printf("%#v", s)
}
result:
------------------------------------------
main.Stu{name:"守法公民张三"}
Process finished with exit code 0
------------------------------------------
Go中结构体是值类型,值类型直接指向内容,所以可用s直接修改它内部变量值。
那&s呢?个人理解为就是取s结构体的地址,但是s的地址本身就指向内容,所以这里是等效的。
实际上变量本身就是一种特殊的指针,但是类型固定能直接使用赋值(静态语言,动态语言如Python则不然),不需要加上*(析址符)
上面如果写成:
(*s).name = "守法公民张三" // error:Invalid indirect of 's' (type 'Stu')
变量的地址可以取,但是反之则不然,不能把一般的变量当成地址来取该地址里的东西,如果可以,那么是指针
浙公网安备 33010602011771号