Go语言构造函数的用法
在 Go 语言中,我们可以在结构体内添加一个函数,实现以函数方式实例化结构体,在实例化过程中按照规则对各个结构体成员进行赋值操作,这样的函数就叫做构造函数。
构造函数能减少函数或主函数的代码冗余。构造函数的参数可以选择性作为结构体的成员值,如果没有参数,结构体的成员值在函数内生成或使用默认值;函数返回值是结构体的实例化变量,并且以指针形式表示。
比如定义结构体 cat,程序在 1~10 随机生成一个数,如果随机数大于 5,结构体 cat 代表老虎;否则为狮子,示例如下:
1)结构体 cat 设置了成员 name、weight 和 habit,对应的数据类型分别为字符串、整型和结构体,结构体成员 habit 使用匿名结构体定义,匿名结构体的成员为 ambient 和 style,其数据类型皆为字符串。
2)构造函数 get_cat() 没有设置参数,只设置了返回值,并且返回值的数据类型为结构体 cat 的指针类型。在构造函数中,通过内置包 rand 随机生成 1~10 的整数,根据随机数的数值分别设置变量 name、weight、ambient、style 的值,这些变量将作为结构体 cat 的成员值。由于结构体 cat 的成员 habit 为匿名结构体,因此在实例化的时候,必须再次定义匿名结构体并执行赋值操作。
3)主函数 main() 调用构造函数 get_cat(),并将函数返回值赋值给变量 c,通过变量 c 访问结构体的成员并输出相应数值。
在 GoLand 中运行上述代码,运行结果为:
构造函数能减少函数或主函数的代码冗余。构造函数的参数可以选择性作为结构体的成员值,如果没有参数,结构体的成员值在函数内生成或使用默认值;函数返回值是结构体的实例化变量,并且以指针形式表示。
比如定义结构体 cat,程序在 1~10 随机生成一个数,如果随机数大于 5,结构体 cat 代表老虎;否则为狮子,示例如下:
package main import ( "fmt" "math/rand" "time" ) type cat struct { // 定义结构体 name string weight int // 结构体成员为匿名结构体 habit struct { ambient string style string } } func get_cat() *cat { // 定义构造函数 // 设置随机数的种子 rand.Seed(time.Now().UnixNano()) n := rand.Intn(10) // 定义变量,用于设置结构体的成员值 var name, ambient, style string var weight int // 根据随机数设置变量值 if n <= 5 { name = "tiger" weight = 500 ambient = "山林" style = "独居" } else { name = "lion" weight = 300 ambient = "草原" style = "群居" } // 实例化结构体 c := cat{ name: name, weight: weight, // 匿名结构体实例化 habit: struct { ambient string style string }{ambient: ambient, style: style}, } return &c } func main() { // 调用构造函数,获取结构体实例化变量 c := get_cat() fmt.Printf("猫科动物为:%v\n", c.name) fmt.Printf("体重为:%v\n", c.weight) fmt.Printf("居住环境:%v\n", c.habit.ambient) fmt.Printf("生活方式:%v\n", c.habit.style) }上述代码一共分为 3 部分:定义结构体、定义构造函数、主函数 main(),每部分实现的功能如下:
1)结构体 cat 设置了成员 name、weight 和 habit,对应的数据类型分别为字符串、整型和结构体,结构体成员 habit 使用匿名结构体定义,匿名结构体的成员为 ambient 和 style,其数据类型皆为字符串。
2)构造函数 get_cat() 没有设置参数,只设置了返回值,并且返回值的数据类型为结构体 cat 的指针类型。在构造函数中,通过内置包 rand 随机生成 1~10 的整数,根据随机数的数值分别设置变量 name、weight、ambient、style 的值,这些变量将作为结构体 cat 的成员值。由于结构体 cat 的成员 habit 为匿名结构体,因此在实例化的时候,必须再次定义匿名结构体并执行赋值操作。
3)主函数 main() 调用构造函数 get_cat(),并将函数返回值赋值给变量 c,通过变量 c 访问结构体的成员并输出相应数值。
在 GoLand 中运行上述代码,运行结果为:
猫科动物为:tiger
体重为:500
居住环境:山林
生活方式:独居