La diferencia entre * y & en el idioma Go
- para resumir
- Ejemplo
Siempre estoy confundido acerca de la diferencia entre * y &, así que lo resumí deliberadamente hoy.
1. Resumen
- & Es el carácter de la dirección.
- * Puede indicar que una variable es un tipo de puntero, o puede indicar la unidad de almacenamiento a la que apunta la variable de tipo de puntero, es decir, el valor al que apunta esta dirección.
2. Ejemplo
- Código
type Person struct {
name string
age int
}
func main() {
// & 是取地址符,取到Person类型对象的地址
// 声明一个Person类型的结构体
Bob := Person{
"Bob", 20}
fmt.Println("Bob:", Bob, " &Bob:", &Bob)
// 声明一个Person类型的指针
Lisa := &Person{
"Lisa",30}
fmt.Println("Lisa:",Lisa,"&Lisa:",&Lisa)
// * 可以表达一个变量是指针类型
var John *Person = &Person{
name: "John",
age: 40,
}
fmt.Println("John:",John," &John:",&John)
// * 也可以表示指针类型变量所指向的存储单元,也就是这个地址所指向的值
fmt.Println("*John:",*John)
//函数参数是指针的话,会修改原来的数据
changName(John)
fmt.Println("*John:",*John)
}
func changName(p *Person) {
// p 是一个指针
//如果是基本数据类型 [p.name = "China"] == [(*p).name = "China"]
//其他类型则必须用 * 取值
(*p).name = "China"
p.age = 100
}
- Resultado de salida