可以通过使用构造函数为结构体分配默认值。我们可以使用构造函数为所有或部分成员分配自定义默认值,而不是直接创建结构体。
示例1:
// Golang程序用于为
//使用构造函数将默认值分配给结构体
package main
import (
"fmt"
)
// 声明一个student结构体
type Student struct{
// 声明结构体变量
name string
marks int64
age int64
}
// 构造函数
func(std *Student) fill_defaults(){
//设置默认值
// 如果没有值存在
if std.name == "" {
std.name = "ABC"
}
if std.marks == 0 {
std.marks = 40
}
if std.age == 0 {
std.age = 18
}
}
// 主函数
func main() {
// 创建一个仅初始化姓名的结构
std1 := Student{name: "Vani"}
// 打印结构
// 不带默认值
fmt.Println(std1)
// 这将分配默认值
// 在结构std1中未初始化的值
std1.fill_defaults()
// 分配后打印
// 默认值到结构变量
fmt.Println(std1)
// 创建一个初始化年龄和分数的结构
std2 := Student{age: 19, marks: 78}
// 分配默认名称
std2.fill_defaults()
// 分配后打印
// 结果名称到结构中
fmt.Println(std2)
}
输出:
{Vani 0 0}
{Vani 40 18}
{ABC 78 19}
另一种为结构体分配默认值的方法是使用标签。标签只能用于字符串值,可以使用单引号(“)实现。
示例2:
// Golang程序用于为
//使用标签为结构体分配默认值
package main
import (
"fmt"
"reflect"
)
// 声明一个person结构
type Person struct {
// 将名称的默认值设置为“geek”
name string `default:"geek"`
}
func default_tag(p Person) string {
// TypeOf返回传递给它的接口值的类型
typ := reflect.TypeOf(p)
// 检查字符串是否为空
if p.name == "" {
// 返回具有给定参数“name”的结构字段
f, _ := typ.FieldByName("name")
// 在标签字符串中返回与键关联的值
// 如果标签中没有这样的键,则返回空字符串
p.name = f.Tag.Get("default")
}
return fmt.Sprintf("%s", p.name)
}
// 主函数
func main(){
// 打印默认名称
fmt.Println("默认名称为:", default_tag(Person{}))
}
输出:
默认名称为: geek