kann mir jemand erklären, warum die Adresse &c1.name
dieselbe ist, nachdem sie in der Funktion changeMe()
geändert wurde. Ich dachte, dass Strings in Go unveränderlich sind.Unveränderliche Zeichenfolgen in 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
}
weil 'c1' ist ein einzigartiges Beispiel, und seine Adresse wird nicht geändert werden, können Sie nur seinen Wert ändern –
ja,' c1' nicht geändert werden, aber es ist Feld 'Name 'ist unveränderlich, oder? Wenn ich den Namen ändere, sollte er eine neue Adresse haben. Was Wenn ich eine extrem große Zeichenfolge speichern möchte, wie speichert der Compiler sie, wenn sie immer noch dieselbe Adresse verwendet? – camabeh