の変更不可能な文字列は、changeMe()
で変更された後に&c1.name
のアドレスが同じ理由がわかっている人はいません。私はストリングがゴーに不変であると思った。Go
package main
import "fmt"
type customer struct {
name string
age int
}
func main() {
c1 := customer{"Todd", 44}
fmt.Println(&c1.name) // 0x8201e4120
changeMe(&c1)
fmt.Println(c1) // {Rocky 44}
fmt.Println(&c1.name) // 0x8201e4120
}
func changeMe(z *customer) {
fmt.Println(z) // &{Todd 44}
fmt.Println(&z.name) // 0x8201e4120
z.name = "Rocky"
fmt.Println(z) // &{Rocky 44}
fmt.Println(&z.name) // 0x8201e4120
}
'c1'は一意のインスタンスであり、そのアドレスは、あなただけの値を変更することができ、変更されません –
はい、' c1'が変更されていないが、それは、フィールド '名前だから'不変ですよね?だから私は 'name'を変更するときに新しいアドレスを持つべきです。もし私が極端に大きな文字列を格納したいのであれば、コンパイラは同じアドレスを使用しているときにどのように格納しますか? – camabeh