Estructuras en Golang

Una estructura o estructura en Golang es un tipo definido por el usuario que permite agrupar/combinar elementos de tipos posiblemente diferentes en un solo tipo. Cualquier entidad del mundo real que tenga algún conjunto de propiedades/campos se puede representar como una estructura. Este concepto generalmente se compara con las clases en la programación orientada a objetos. Se puede denominar como una clase ligera que no admite la herencia pero sí la composición.

Por ejemplo, una dirección tiene un nombre, calle, ciudad, estado, código PIN. Tiene sentido agrupar estas tres propiedades en una sola dirección de estructura como se muestra a continuación.

Declarando una estructura:

 type Address struct {
      name string 
      street string
      city string
      state string
      Pincode int
}

En lo anterior, la palabra clave type introduce un nuevo tipo. Le sigue el nombre del tipo ( Dirección ) y la palabra clave struct para ilustrar que estamos definiendo una estructura. La estructura contiene una lista de varios campos dentro de las llaves. Cada campo tiene un nombre y un tipo.

Nota: También podemos hacerlos compactos combinando varios campos del mismo tipo como se muestra en el siguiente ejemplo:

type Address struct {
    name, street, city, state string
    Pincode int
}

Para definir una estructura: La sintaxis para declarar una estructura:

var a Address

El código anterior crea una variable de tipo Dirección que, de forma predeterminada, se establece en cero. Para una estructura, cero significa que todos los campos se establecen en su valor cero correspondiente. Entonces, los campos nombre, calle, ciudad, estado se establecen en «», y el código PIN se establece en 0.

También puede inicializar una variable de un tipo de estructura usando un literal de estructura como se muestra a continuación:

var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}

Nota:

  • Pase siempre los valores de campo en el mismo orden en que se declaran en la estructura. Además, no puede inicializar solo un subconjunto de campos con la sintaxis anterior.
  • Go también admite el nombre: sintaxis de valor para inicializar una estructura (el orden de los campos es irrelevante cuando se usa esta sintaxis). Y esto le permite inicializar solo un subconjunto de campos. Todos los campos no inicializados se establecen en su correspondiente valor cero.

    Ejemplo:

    var a = Dirección{Nombre:”Akshay”, calle:”PremNagar”, estado:”Uttarakhand”, Código PIN:252636} //ciudad:””

// Golang program to show how to
// declare and define the struct
  
package main
  
import "fmt"
  
// Defining a struct type
type Address struct {
    Name    string
    city    string
    Pincode int
}
  
func main() {
  
    // Declaring a variable of a `struct` type
    // All the struct fields are initialized 
    // with their zero value
    var a Address 
    fmt.Println(a)
  
    // Declaring and initializing a
    // struct using a struct literal
    a1 := Address{"Akshay", "Dehradun", 3623572}
  
    fmt.Println("Address1: ", a1)
  
    // Naming fields while 
    // initializing a struct
    a2 := Address{Name: "Anikaa", city: "Ballia",
                                 Pincode: 277001}
  
    fmt.Println("Address2: ", a2)
  
    // Uninitialized fields are set to
    // their corresponding zero-value
    a3 := Address{Name: "Delhi"}
    fmt.Println("Address3: ", a3)
}

Producción:

{  0}
Address1:  {Akshay Dehradun 3623572}
Address2:  {Anikaa Ballia 277001}
Address3:  {Delhi  0}

¿Cómo acceder a los campos de una estructura?

Para acceder a campos individuales de una estructura , debe usar el operador de punto (.) .

Ejemplo:

// Golang program to show how to
// access the fields of struct
package main
  
import "fmt"
  
// defining the struct
type Car struct {
    Name, Model, Color string
    WeightInKg         float64
}
  
// Main Function
func main() {
    c := Car{Name: "Ferrari", Model: "GTC4",
            Color: "Red", WeightInKg: 1920}
  
    // Accessing struct fields
    // using the dot operator
    fmt.Println("Car Name: ", c.Name)
    fmt.Println("Car Color: ", c.Color)
  
    // Assigning a new value
    // to a struct field
    c.Color = "Black"
      
    // Displaying the result
    fmt.Println("Car: ", c)
}

Producción:

Car Name:  Ferrari
Car Color:  Red
Car:  {Ferrari GTC4 Black 1920}

Punteros a una estructura

Los punteros en el lenguaje de programación Go o 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:

// Golang program to illustrate
// the pointer to struct
package main
  
import "fmt"
  
// defining a structure
type Employee struct {
    firstName, lastName string
    age, salary int
}
  
func main() {
  
    // passing the address of struct variable
    // emp8 is a pointer to the Employee struct
    emp8 := &Employee{"Sam", "Anderson", 55, 6000}
  
    // (*emp8).firstName is the syntax to access
    // the firstName field of the emp8 struct
    fmt.Println("First Name:", (*emp8).firstName)
    fmt.Println("Age:", (*emp8).age)
}

Producción:

First Name: Sam
Age: 55

Golang nos da la opción de usar emp8.firstName en lugar de la desreferencia explícita (*emp8).firstName para acceder al campo firstName . Ejemplo para mostrar esto es el siguiente:

// Golang program to illustrate
// the pointer to struct
package main
  
import "fmt"
  
// Defining a structure
type Employee struct {
    firstName, lastName string
    age, salary         int
}
  
// Main Function
func main() {
  
    // taking pointer to struct
    emp8 := &Employee{"Sam", "Anderson", 55, 6000}
  
    // emp8.firstName is used to access
    // the field firstName
    fmt.Println("First Name: ", emp8.firstName)
    fmt.Println("Age: ", emp8.age)
}

Producción:

First Name:  Sam
Age:  55

Publicación traducida automáticamente

Artículo escrito por anita yadav 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 *