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