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')

变量的地址可以取,但是反之则不然,不能把一般的变量当成地址来取该地址里的东西,如果可以,那么是指针