¿Cómo crear una instancia de Struct usando un literal de Struct en Golang?

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: 
 

  1. Una clave debe ser un nombre de campo declarado en el tipo de estructura.
  2. 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.
  3. 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.
  4. Un literal puede omitir la lista de elementos; dicho literal se evalúa como el valor cero para su tipo.
  5. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *