Go语言构造函数的实现方式(非常详细,附带实例)
Go 语言中没有构造函数的概念,但是通过结构体初始化的过程可以模拟构造函数,也就是以构造函数的方式实例化结构体,并在实例化过程中为结构体中的成员赋值。函数的返回值是结构体的实例,并以指针形式表示。
例如,将上述示例代码中的构造函数修改为使用参数的形式,代码如下:
Go语言不带参数的构造函数
如果构造函数未设置参数,那么结构体的成员值可以在函数内定义。代码如下:package main import ( "fmt" ) type profile struct { name string age int } func NewProfile() *profile { //定义变量,作为结构体的成员值 name := "张三" age := 20 //初始化结构体 p := profile{ name: name, age: age, } return &p } func main() { //调用函数 p := NewProfile() fmt.Printf("姓名:%v\n", p.name) fmt.Printf("年龄:%v\n", p.age) }运行结果如下:
姓名:张三
年龄:20
Go语言带参数的构造函数
为了灵活地使用构造函数,可以将函数的参数作为结构体成员值进行传递。例如,将上述示例代码中的构造函数修改为使用参数的形式,代码如下:
package main import ( "fmt" ) type profile struct { name string age int } func NewProfile(name string, age int) *profile { //初始化结构体 p := profile{ name: name, age: age, } return &p } func main() { //调用函数 p := NewProfile("张三", 20) fmt.Printf("姓名:%v\n", p.name) fmt.Printf("年龄:%v\n", p.age) }运行结果如下:
姓名:张三
年龄:20
Go语言为嵌套的结构体使用构造函数
如果想通过模拟构造函数初始化嵌套结构体,则可以分别为多个结构体创建构造函数。代码如下:package main import ( "fmt" ) type job struct { position string year int } type info struct { name string age int record job } func NewJob(position string, year int) *job { //初始化 job 结构体 return &job{ position: position, year: year, } } func NewInfo(name string, age int, position string, year int) *info { //调用函数初始化 job 结构体 record := *NewJob(position, year) //初始化 info 结构体 return &info{ name: name, age: age, record: record, } } func main() { //调用函数 p := NewInfo("张三", 32, "艺术总监", 6) fmt.Printf("姓名:%v\n", p.name) fmt.Printf("年龄:%v\n", p.age) fmt.Printf("职位:%v\n", p.record.position) fmt.Printf("工作年限:%v 年\n", p.record.year) }运行结果如下:
姓名:张三
年龄:32
职位:艺术总监
工作年限:6年