go 工厂模式

go所谓的工厂模式其实就是: 包内一个不可直接实例的结构体(结构体名称首字母小写),包外不可直接实例,那么为了解决这个问题,就写一个包外可调用的函数,通过这个函数实现返回结构体对象。

例如: 创建两个包,main、 model, main包中要获取model包的实例,并使用。实现方法如下:

src/test/main/main.go

src/test/model/model.go

1.main.go代码

package main

import (
	"fmt"
	"test/model"
)

func main() {
	p := model.CreatePerson("tom",18)
	age := p.GetAge()
	fmt.Println(*p)
	fmt.Println(p.Name)
	fmt.Println(age)
}

2.model.go代码

package model

type person struct {
	Name string
	age int
}

//CreatePerson 工厂方法
func CreatePerson(n string,a int) *person {
	p := person{Name:n,age:a}
	return &p
}

func (p *person)GetAge() int {
	return p.age
}

注意:

1.工厂方法名首字母大写,返回的是 结构体实例的指针(值引用,外包操作的都将会是同一份数据)

2.结构体内的字段名是首字母小写的话,那么包外不能直接访问,需要通过 绑定的方法来获取,绑定的是结构体指针,因为包外要操作的对象需要用的是同一份数据。

3.包外获取到的 对象是指针类型的,那么调用这个对象按正常逻辑应该是 (*p).Name ,但是go官方对于对象的底层,已经优化了指针类型的对象调方法或字段的方式,可以直接p.Name 和p.GetAge()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值