English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
El struct (estructura) en Golang es un tipo definido por el usuario, que permite agrupar elementos de tipos diferentes/Combinado en un solo tipo. Cualquier entidad en el mundo real que tenga un conjunto de atributos/La entidad de los campos puede representarse como una estructura. Este concepto se compara a menudo con las clases en la programación orientada a objetos. Puede llamarse una clase ligera que no admite herencia pero admite composición.
Por ejemplo, una dirección tiene name, street, city, state, Pincode. Como se muestra a continuación, estos tres atributos se combinan en una estructuraDirecciónTiene sentido.
Declarar la estructura:
type Address struct { name string street string city string state string Pincode int }
En el ejemplo siguiente,typeLa palabra clave introduce un nuevo tipo. Después de esto, sigue el nombre del tipo (Dirección)y la palabra clavestruct,Para explicar la estructura que estamos definiendo. Esta estructura contiene una lista de campos dentro de los corchetes. Cada campo tiene un nombre y un tipo.
Nota:También podemos hacer que los campos de tipos idénticos sean compactos combinándolos, como se muestra en el siguiente ejemplo:
type Address struct { name, street, city, state string Pincode int }
Definir la estructura:Sintaxis para declarar la estructura:
var a Address
El código anterior crea unaTipo AddressLas variables, por defecto se establecen en cero. Para las estructuras, cero significa que todos los campos se establecen en sus valores de cero correspondientes. Por lo tanto, los campos name, street, city, state se establecen en "", y Pincode se establece en 0.
También puedeInicializar variables de tipo estructura utilizando expresiones literales de estructuraComo se muestra a continuación:
var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}
Nota:
Siempre pasar los valores de los campos en el orden en que se declararon en la estructura. Del mismo modo, no puede inicializar un subconjunto de campos utilizando la sintaxis anterior.
Go también admiteNombre: valorSintaxis, utilizada para inicializar estructuras (al usar esta sintaxis, el orden de los campos no es importante). Además, esto solo permite inicializar un subconjunto de campos. Todos los campos no inicializados se establecen en su valor de cero correspondiente.
Por ejemplo:
var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}
package main import "fmt" //Definir el tipo de estructura type Address struct { Name string city string Pincode int } func main() { //Declarar una variable de tipo "struct" //Inicializar todos los campos de struct //Su valor es cero var a Address fmt.Println(a) //Declaración e inicialización // La estructura utiliza la notación de estructura a1 := Address{"Akshay", "Dehradun", 3623572} fmt.Println("Dirección1: "1) //Al nombrar campos //Inicializar una estructura a2 := Dirección{Name: "Anikaa", city: "Ballia", Pincode: 277001} fmt.Println("Dirección2: "2) //Los campos no inicializados se establecen en //Sus valores de cero a3 := Dirección{Name: "Delhi"} fmt.Println("Dirección3: "3) }
Salida:
{ 0} Dirección1: {Akshay Dehradun} 3623572} Dirección2: {Anikaa Ballia} 277001} Dirección3: {Delhi 0}
Para accederLa estructuraCada campo, debe usar el punto(.)Operadores.
package main import "fmt" //Definir la estructura type Car struct { Nombre, Modelo, Color string PesoEnKg float64 } func main() { c := Car{Name: "Ferrari", Model: "GTC4, Color: "Rojo", PesoEnKg: 1920} //Acceder a los campos de la estructura //Usar el operador de punto fmt.Println("Nombre del coche: ", c.Name) fmt.Println("Color del coche: ", c.Color) //Asignar nuevo valor //Puntero a un campo de estructura c.Color = "Negro" //Mostrar resultado fmt.Println("Coche: ", c) }
Salida:
Nombre del coche: Ferrari Color del coche: Rojo Coche: {Ferrari GTC4 Negro 1920}
Un puntero en Golang es una variable que se utiliza para almacenar la dirección de memoria de otra variable. También puede crear un puntero a una estructura, como se muestra en el siguiente ejemplo:
// Puntero a la estructura package main import "fmt" // Definir una estructura type Employee struct { firstName, lastName string age, salary int } func main() { //Pasar la dirección de la variable struct // emp8 emp8 := &Employee{"Sam", "Anderson", 55, 6000} //* emp8, // emp8El campo firstName de la estructura fmt.Println("Nombre:", (*emp8).firstName) fmt.Println("Edad:", (*emp8).age) }
Salida:
Nombre: Sam Edad: 55
Golang nos proporciona la opción de usar emp8.firstName en lugar de desreferenciar explícitamente (* emp8
//Puntero a la estructura package main import "fmt" //Definir una estructura type Employee struct { firstName, lastName string age, salary int } func main() { //Obtener un puntero a la estructura emp8 := &Employee{"Sam", "Anderson", 55, 6000} // emp8Se utiliza .firstName para acceder //Campo firstName fmt.Println("Nombre: ", emp8.firstName) fmt.Println("Edad: ", emp8.age) }
Salida:
Nombre: Sam Edad: 55