¿Cómo asignar un valor predeterminado para el campo de estructura en Golang?

Los valores predeterminados se pueden asignar a una estructura mediante una función constructora. En lugar de crear una estructura directamente, podemos usar un constructor para asignar valores predeterminados personalizados a todos o algunos de sus miembros.

Ejemplo 1:

// Golang program to assign
// default values to a struct 
// using constructor function
package main
  
import (
    "fmt"
)
  
// declaring a student struct
type Student struct{
      
    // declaring struct variables
    name string
    marks int64
    age int64
}
  
// constructor function
func(std *Student) fill_defaults(){
  
    // setting default values
    // if no values present
    if std.name == "" {
        std.name = "ABC"
    }
      
    if std.marks == 0 {
        std.marks = 40
    }
      
    if std.age == 0 {
        std.age = 18
    }
}
  
// main function
func main() {
  
    // creating a struct where
    // only the name is initialised
    std1 := Student{name: "Vani"}
      
    // printing the struct 
    // with no default values
    fmt.Println(std1)
      
    // this will assign default values 
    // to non-initialised valiables
    // in struct std1
    std1.fill_defaults()
      
    // printing after assigning
    // defaults to struct variables
    fmt.Println(std1)
      
    // creating a struct where
    // age and marks are initialised
    std2 := Student{age: 19, marks: 78}
      
    // assigning default name
    std2.fill_defaults()
      
    // printing after assigning 
    // default name to struct
    fmt.Println(std2)
      
}

Producción:

{Vani 0 0}
{Vani 40 18}
{ABC 78 19}

Otra forma de asignar valores predeterminados a las estructuras es mediante el uso de etiquetas. Las etiquetas solo se pueden usar para valores de string y se pueden implementar usando comillas simples (”).

Ejemplo 2:

// Golang program to assign
// default values to a struct 
// using tags
  
package main
  
import (
    "fmt"
    "reflect"
)
  
// declaring a person struct
type Person struct {
  
    // setting the default value 
    // of name to "geek"
      name string `default:"geek"` 
  
}
  
func default_tag(p Person) string {
  
    // TypeOf returns type of 
    // interface value passed to it
      typ := reflect.TypeOf(p)
  
    // checking if null string
      if p.name == "" {
          
        // returns the struct field 
        // with the given parameter "name"
            f, _ := typ.FieldByName("name")
          
        // returns the value associated 
        // with key in the tag string
        // and returns empty string if 
        // no such key in tag
            p.name = f.Tag.Get("default")
      }
  
      return fmt.Sprintf("%s", p.name)
}
  
// main function
func main(){
  
    // prints out the default name 
    fmt.Println("Default name is:", default_tag(Person{}))
}

Producción:

Default name is: geek

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 *