¿Cómo copiar el tipo de estructura usando el valor y la referencia del puntero en Golang?

Una estructura o struct en Golang es un tipo de datos definido por el usuario que permite combinar tipos de datos de diferentes tipos y actuar como un registro.
Una variable de estructura en Golang se puede copiar a otra variable fácilmente usando la declaración de asignación (=) . Los cambios realizados en la segunda estructura no se reflejarán en la primera estructura.

Ejemplo 1:

// Golang program to illustrate copying
// a structure to another variable
  
package main
  
import (
    "fmt"
)
  
// declaring a structure
type Student struct{
  
    // declaring variables
    name string
    marks int64
    stdid int64
}
  
// main function
func main() {
      
          
    // creating the instance of the 
    // Student struct type 
    std1 := Student{"Vani", 98, 20024}
          
    // prints the student struct
    fmt.Println(std1)
          
    // copying the struct student
    // to another variable by 
    // using the assignment operator
    std2 := std1
          
    // printing copied struct
    // this will have same values 
    // as struct std1
    fmt.Println(std2)
          
    // changing values of struct
    // std2 after copying
    std2.name = "Abc"
    std2.stdid = 20025
          
    // printing updated struct
    fmt.Println(std2)
      
}

Producción:

{Vani 98 20024}
{Vani 98 20024}
{Abc 98 20025}

En el caso de una referencia de puntero a la estructura, la ubicación de memoria subyacente de la estructura original y el puntero a la estructura serán los mismos. Cualquier cambio realizado en la segunda estructura también se reflejará en la primera estructura. El puntero a una estructura se logra mediante el uso del operador ampersand (&) . Se asigna en el montón y se comparte su dirección.

Ejemplo 2:

// Golang program to illustrate the
// concept of a pointer to a struct
  
package main
  
import (
    "fmt"
)
  
// declaring a structure
type Person struct{
  
    // declaring variables
    name string
    address string
    id int64
}
  
// main function
func main() {
      
          
    // creating the instance of the 
        // Person struct type 
    p1 := Person{"Vani", "Delhi", 20024}
          
    // prints the student struct
    fmt.Println(p1)
          
    // referencing the struct person
    // to another variable by 
    // using the ampersand operator
    // Here, it is the pointer to the struct 
    p2 := &p1
          
    // printing pointer to the struct
    fmt.Println(p2)
          
    // changing values of struct p2
    p2.name = "Abc"
    p2.address = "Hyderabad"
          
    // printing updated struct
    fmt.Println(p2)
      
    // struct p1 values will 
    // also change since values
    // of p2 were also changed
    fmt.Println(p1)
      
}

Producción:

{Vani Delhi 20024}
&{Vani Delhi 20024}
&{Abc Hyderabad 20024}
{Abc Hyderabad 20024}

Publicación traducida automáticamente

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