golang 工厂模式

golang的结构体没有 构造函数,通常可以使用工厂模式来解决这个问题

使用场景,当使用结构体时,结构体名称首字母是小写时,外部就无法引用

此时就可以用工厂模式来解决

案例:

在model包里定义一个结构体首字母大写

package model

//定义一个结构体
type Student struct{
	Name string
	Scoute float64
}

在main包里引用

package main
import(
	"fmt"
	"go_code/project01/object/demo7/model"
)

func main(){
  stu := model.Student{
	  Name :"tom",
	  Scoute : 36.5,
  }
  fmt.Println(stu)//结果{tom 36.5}
}

但当model包里的结构体首字母改为小写时,main包就无法引用了

解决方式:

package model

//定义一个结构体
type student struct{
	Name string
	Scoute float64
}
//*student返回结构体的指针
func GetStudent(n string,s float64) *student {
	//外包引用不了,但本包是可以引用的
	stu := student{
		Name : n,
		Scoute : s,
	}
	return &stu
}
package main
import(
	"fmt"
	"go_code/project01/object/demo7/model"
)

func main(){
  stu := model.GetStudent("tom",88.8)
  fmt.Println(stu)  //结果&{tom 88.8}
  fmt.Println(*stu) //结果{tom 88.8}
  fmt.Println("name = ",stu.Name," stoute = ",stu.Scoute) //结果name =  tom  stoute =  88.8
}

案例:

如果结构体里面的字段也是首字母小写 解决方式

package model

//定义一个结构体
type student struct{
	Name string
	scoute float64
}
//*student返回结构体的指针
func GetStudent(n string,s float64) *student {
	//外包引用不了,但本包是可以引用的
	stu := student{
		Name : n,
		scoute : s,
	}
	return &stu
}
//结构体中的scoute字段也是小写所以需要写一个方法返回
func (s *student) GetScoute() float64{
	return s.scoute
}
package main
import(
	"fmt"
	"go_code/project01/object/demo7/model"
)

func main(){
  stu := model.GetStudent("tom",99.8)
  fmt.Println("name = ",stu.Name," stoute = ",stu.GetScoute()) //结果name =  tom  stoute =  99.8
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值