pointer - interface to struct
¿Cuál es el beneficio de definir los métodos Go lejos de las definiciones de estructuras? (3)
Esta es una ventaja de Ir a través de los idiomas basados en tipo: puede organizar sus archivos como desee:
- puede juntar todas las funciones similares, incluso si hay muchos tipos de receptores
- puedes dividir un archivo que de otra manera sería demasiado grande
Con tanta frecuencia, Go no agregaba una restricción que era inútil. Entonces, ¿la respuesta también podría ser "por qué no" ?
realmente no puede agregar métodos a ningún tipo existente (struct), ya que los métodos deben residir en el mismo paquete que el tipo
Si pudiera, podría no ser capaz de determinar a qué función llamar en caso de utilizar el mismo nombre de función en la misma estructura en dos paquetes diferentes. O eso haría que ciertos paquetes sean incompatibles.
Ir le permite a uno definir métodos por separado de la estructura / tipo de datos en que trabajan. ¿Significa simplemente flexibilidad al colocar las definiciones de métodos o algo más?
He escuchado que el sistema struct / methods de Go se compara con el parche de mono, pero si lo entiendo correctamente, entonces no se pueden agregar métodos a ningún tipo existente (struct), ya que los métodos deben residir en el mismo paquete que el tipo. Es decir. usted puede parche de mono solo los tipos que están bajo su control de todos modos. ¿O me estoy perdiendo algo?
¿En qué casos definirías un tipo y sus métodos en archivos fuente separados (o en diferentes partes del mismo archivo fuente)?
Esto es (en parte, probablemente) porque en Go, puede tener métodos en cualquier tipo, no solo struct:
type Age uint
func (a Age) Add(n Age) Age {
return a + n
}
Esta es también la forma en que puede agregar métodos a un tipo existente. Lo que debe hacer es definir un nuevo tipo basado en ese tipo existente y agregar los métodos que desee.
Monkey Patching no es posible en go. El tipo en el que defines los métodos debe residir en el mismo paquete.
Lo que puede hacer es definir funciones y métodos donde quiera dentro del paquete. Realmente no importa si la definición de tipo está en el mismo archivo que la definición de método para el tipo.
Esto hace posible agrupar todas las definiciones de tipo en un archivo y tener la implementación del método en otro. Posiblemente con otros ayudantes que son necesarios por los métodos.