Una estructura o estructura en Golang es un tipo de datos definido por el usuario que es una composición de varios campos de datos. Cada campo de datos tiene su propio tipo de datos, que puede ser un tipo integrado o definido por el usuario. Struct representa cualquier entidad del mundo real que tenga algún conjunto de propiedades/campos.
Por ejemplo, un estudiante tiene un nombre, número de registro, ciudad, departamento. Tiene sentido agrupar estas cuatro propiedades en una sola dirección de estructura como se muestra a continuación.
type Student struct { name string roll_no int city string department string }
Sintaxis para declarar una estructura:
var x Student
El código anterior crea una variable de tipo Student en la que los campos se establecen de forma predeterminada en sus respectivos valores cero .
Como struct es un tipo de datos compuesto, se inicializa usando literales compuestos . Los literales compuestos construyen valores para estructuras, arreglos, segmentos y mapas donde se usa una sola sintaxis para esos tipos. Los literales de estructura se utilizan para crear instancias de estructura en Golang. Puede crear una instancia de estructura utilizando un literal de estructura de la siguiente manera:
var d = Student{"Akshay", 1, "Lucknow", "Computer Science"}
También podemos usar un operador de declaración corto .
d := Student{"Akshay", 1, "Lucknow", "Computer Science"}
Debe tener en cuenta las siguientes reglas al crear un literal de estructura:
- Una clave debe ser un nombre de campo declarado en el tipo de estructura.
- Una lista de elementos que no contiene ninguna clave debe enumerar un elemento para cada campo de estructura en el orden en que se declaran los campos.
- Una lista de elementos que contiene claves no necesita tener un elemento para cada campo de estructura. Los campos omitidos obtienen el valor cero para ese campo.
- Un literal puede omitir la lista de elementos; dicho literal se evalúa como el valor cero para su tipo.
- Es un error especificar un elemento para un campo no exportado de una estructura perteneciente a un paquete diferente.
Ejemplo 1:
C
// Golang program to show how to // declare and define the struct // using struct literal package main // importing required modules import "fmt" // Defining a struct type type Student struct { name string roll_no int city string department string } func main() { // Declaring a variable of a `struct` type // All the struct fields are initialized // with their zero value var x Student fmt.Println("Student0:", x) // Declaring and initializing a // struct using a struct literal // Fields should be initialised in // the same order as they are declared // in struct's definition x1 := Student{"Akshay", 1, "Lucknow", "Computer Science"} fmt.Println("Student1: ", x1) // You can specify keys for // their respective values x2 := Student{name: "Anita", roll_no: 2, city: "Ballia", department: "Mechanical"} fmt.Println("Student2: ", x2) }
Producción:
Student0: { 0 } Student1: {Akshay 1 Lucknow Computer Science} Student2: {Anita 2 Ballia Mechanical}
Los campos no inicializados se establecen en sus correspondientes valores cero.
Ejemplo 2:
C
// Golang program illustrating // the use of string literals package main // importing required modules import "fmt" // Defining a struct type type Address struct { name, city string Pincode int } func main() { add1 := Address{name: "Ram"} fmt.Println("Address is:", add1) }
Producción:
Address is: {Ram 0}
Debe tenerse en cuenta que los valores no inicializados se establecen en cero cuando se utiliza el inicializador field:value durante la creación de instancias. El siguiente código generará un error.
Ejemplo:
C
// Golang program illustrating // the use of string literals package main // importing required modules import "fmt" // Defining a struct type type Address struct { name, city string Pincode int } func main() { add1 := Address{"Ram"} fmt.Println("Address is: ", add1) }
Producción:
Compilation Error: too few values in Address literal
Si especifica al menos una clave para un elemento, también debe especificar todas las demás claves.
Ejemplo:
C
package main // importing required modules import "fmt" // Defining a struct type type Address struct { name, city string Pincode int } func main() { // Only 1 key is specified here add1 := Address{name: "Ram", "Mumbai", 221007} fmt.Println("Address is: ", add1) }
Producción:
Compilation Error: mixture of field:value and value initializers
El programa anterior arroja un error ya que hemos especificado la clave para un solo elemento y eso crea una mezcla de los inicializadores de campo: valor y valor. Deberíamos ir con los inicializadores field:value o value.
Publicación traducida automáticamente
Artículo escrito por Hritika Rajput y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA