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年
ICP备案:
公安联网备案: