是否有這種行爲的原因?我想知道內存級別有什麼不同。編譯器返回「不能接受複合文字的地址」,而我可以明確地要求它這樣做。爲什麼變量的內聯實例化需要顯式地將其地址調用指針方法,而對於現有的變量,其隱含條件是
繼承人的去操場go playground link
u := User{"john"}
fmt.Println(u.Name()) //implicit
//fmt.Println(User{"john"}.Name()) //Error: cannot call pointer method on composite literal, cannot take the address of composite literal
fmt.Println((&User{"jim"}).Name()) //explicit
type User struct {
name string
}
func (u *User) Name() string {
return u.name
}
「因爲直到它被分配給一個變量之前,複合litteral不可尋址」我想知道爲什麼。該線程不會給出令人滿意的推理/參數。 – Gnani 2014-09-01 09:34:49
@Gnani,因爲文字值本身不是直接可尋址的。 &CompiteLiteral是。 – VonC 2014-09-01 09:35:56