Golang-工厂模式

工厂模式

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版权协议,转载请附上原文出处链接和本声明。