工厂模式
Golang中的结构体没有构造函数,通常使用工厂模式来解决这个问题。
即:当结构体的首字母小写时,为了在其它包也能创建该结构体的实例,这时就需要工厂模式来解决(通常使用编写一个函数实现功能)。
同理,当字段名小写时,为了能在其它包也能调用该字段,通常使用编写一个方法来实现。
案例演示:
model包
package model
type Student struct {
Name string
Score float64
}
type person struct {
Name string
Id string
age int
}
// model包里的person结构体首字母是小写的,只能在model包里使用
// 通过工厂模式,实现person结构体在其它包也能使用
func NwePerson(name, id string, age1 int) *person {
return &person{Name: name, Id: id, age: age1}
}
//结构体内的字段名首字母小写时,只能在本包内使用
// 通过定义一个方法实现其能在其它包被使用
func (p *person) GetAge() int {
return p.age
}
main包
import (
"fmt"
"go_code/chapter10/fctory11/model"
)
func main() {
//model包里的Student结构体变量首字母大写,可以直接调用
stu := model.Student{
Name: "tom",
Score: 90.5,
}
fmt.Println(stu) //{tom 90.5}
// model包里的person结构体首字母是小写的,只能在model包里使用
// 通过工厂模式,实现person结构体在其它包也能使用
p := model.NwePerson("Alex", "012x", 15) //指针变量
fmt.Println(p) //返回地址 &{Alex 012x 15}
fmt.Println(&p) //返回地址 0xc000006030
fmt.Println(*p) //返回值{Alex 012x 15}
fmt.Println("Name=", p.Name, "ID=", p.Id, "Age=", p.GetAge())
//Name= Alex ID= 012x Age= 15
}
版权声明:本文为ALEX_CYL原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。