Golang面向对象编程—工厂模式创建实例

说明

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

引入

看一个需求:

package main
type Student struce{
  Name string
  ...
}

因为这里的Student的首字母S是大写的,如果我们想在其它包创建Student的实例,我们只要引入包,直接创建Student结构体的变量(实例)。但是问题来了,如果首字母是小写,该怎么办?->工厂模式来解决。

工厂模式跨包创建实例

student.go

package model

type student struct{
	Name string
	Age int
}

func NewStudent(name string,age int) *student{
	return &student{
		Name : name,
		Age : age,
	}
}

test.go

package main

import(
	"fmt"
	"go_code/OOP/model"
)

func main() {
	 
	stu := model.NewStudent("Casey",18)
	fmt.Println(*stu)
}

如果将student的结构体字段Name改成name,我们又能正常访问吗?
解决方法(类似java中的getter,setter)
student.go

package model

type student struct{
	name string
	Age int
}

func NewStudent(name string,age int) *student{
	return &student{
		name : name,
		Age : age,
	}
}

func (this *student) GetName()string{
	return this.name
}

test.go

package main

import(
	"fmt"
	"go_code/OOP/model"
)

func main() {
	 
	stu := model.NewStudent("Casey",18)
	fmt.Println(stu.GetName())
}

博主首页链接:https://blog.youkuaiyun.com/weixin_44736475
原创不易,希望大家多多支持
如果文章对你有帮助,记得一键三连哦!❤️❤️❤️

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值