Va el método del valor del puntero lenguaje y los métodos receptor destinatario

 En el lenguaje Go es definir las funciones, métodos y funciones de la recipient're sólo un argumento, y esa es la forma en  func y entre un argumento más identificadores. Definido entre el destinatario y el nombre de la función de la palabra clave func:

persona de tipo struct { 
    nombre de cadena de 
    edad int 
} 

func (p persona) por ejemplo () { 
    fmt.Printf ( " Soy% s,% d años \ n " , p.name, p.age) 
}

El receptor tiene dos, uno es el valor del receptor un puntero a un destinatario. Como su nombre indica, el valor del destinatario, el destinatario es el tipo de un valor, es una copia del método interno no hacer cambios a su destinatario real; receptor puntero, escriba el destinatario es un puntero, una referencia al destinatario de esta modificación del efecto entre el receptor real de referencia.
Mira las dos piezas de código
Un código:
paquete principal 

de importación " FMT " 

persona de tipo struct { 
   nombre de cadena de 
   edad int 
} 
func (p persona) por ejemplo () { 
   fmt.Printf ( " Soy% s,% d años \ n " , p.name, p.age ) 
} 
func (p Persona) de más edad () { 
   p.age = p.age + 1 
} 
func main () { 
   var p1 persona = Persona { " zhansan " , 16 } 
   p1.older () 
   p1.say () 
   // salida: soy zhangsan, de 16 años de edad 
   var p2 * Persona Persona = & {" Lisi " , 17 } 
   p2.older () 
   p2.say () 
   // salida: Soy Lisi, 17 años 
}

 salida:

#gosetup 
I ' m zhansan, 16 años 
I ' m Lisi, de 17 años de edad

Código II:

paquete principal 

de importación " FMT " 

persona de tipo struct { 
    nombre de cadena de 
    edad int 
} 
func (p persona) por ejemplo () { 
    fmt.Printf ( " Soy% s,% d años \ n " , p.name, p.age ) 
} 
func (p * Persona) de más edad () { 
    p.age = p.age + 1 
} 
func main () { 
    var p1 persona = Persona { " zhansan " , 16 } 
    p1.older () 
    p1.say () 
    / / salida: soy zhangsan, 17 años 
    varp2 * Persona Persona = & { " Lisi " , 17 } 
    p2.older () 
    p2.say () 
    // salida: Soy Lisi, de 18 años de edad 
}

salida:

#gosetup 
I ' m zhansan, 17 años 
I ' m Lisi, de 18 años de edad

Esta diferencia es de sólo dos códigos en más viejo método () que, primero valor de código es el método destinatario, el segundo segmento de código es un puntero a los métodos de receptores.

Supongo que te gusta

Origin www.cnblogs.com/tianyun5115/p/12613036.html
Recomendado
Clasificación