Estructuras en GO (golang -struct)
Muchas personas piensan en las estructuras struct
como si fueran las clases en go, pero esto no es correcto, tal como lo dice en la documentación del las estructuras son una colección de campos.
type struct_name struct { member member_data_type member member_data_type }
Esto si nos ponemos a pensar es más parecido a un array asociativo de PHP que otra cosa pero no son arrays, las estructuras pueden contener variables de muchos tipos diferentes de datos a diferencia de estos.
También con ellas podemos hacer cosas parecidas a las que hacíamos con las clases, como por ejemplo usar un método, veamos el ejemplo que da el tour del lenguaje pero modificado
Ejemplopackage main import "fmt" type Local struct { vertexX int vertexY int name string } func main(){ r := Local{1, 2,"stadium"} fmt.Println(r) onlyname(r) r.printname() } func onlyname(x Local){ fmt.Println(x.name) } func (l *Local) printname(){ fmt.Println(l.name) }
El código anterior funciona correctamente, ¿esto quiere decir que las estructuras son clases?
Respuesta: No
Métodos
Los métodos de Go los podemos usar gracias que el nombre de la estructura es named type, no puedes usar métodos en punteros e interfaces, lo cual es algo lógico para mí, no se puede apuntar al puntero del puntero. Para ver más sobre métodos vea funciones en go
Estructura anónima
¿de existir existen, pero realmente tiene sentido crear una estructura anónima? Recordad que los métodos lo podemos usar porque son named types no porque sea una estructura.
Sintaxisvarname := struct { x string y string }{ x: "string1", y: "string2", }
tenga en cuenta que estas estructuras no pueden ser referenciadas y, por tanto, estarán aisladas.