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
居住环境:山林
生活方式:独居
ICP备案:
公安联网备案: