## **工厂模式**
Golang的结构体没有构造函数,通常可以使用工厂模式来解决这个问题。
```
一个结构体的声明是这样的:
packagemodel
typeStudentstruct
{Namestring...
}
因为这里的Student的首字母S是大写的,如果我们想在其它包创建Student的实例(比如main包),
引入model包后,就可以直接创建Student结构体的变量(实例)。但是问题来了,如果首字母是小写的,
比如是typestudentstruct{....}就不不行了,怎么办\--->工厂模式来解决.
```
**工厂模式来解决问题**
使用工厂模式实现跨包创建结构体实例(变量)的案例:
如果model包的结构体变量首字母大写,引入后,直接使用,没有问题
![](https://img.kancloud.cn/f6/9e/f69ed3eb92defc52ea1a5d1815bc21cd_889x402.png)
如果model包的结构体变量首字母小写,引入后,不能直接使用,可以工厂模式解决,看老师演示,代码:
![](https://img.kancloud.cn/09/5a/095a1549810eea2e3bac32ef37f43d9c_536x840.png)
同学们思考一下,如果model包的student的结构体的字段Score改成score,我们还能正常访问吗?又应该如何解决这个问题呢?\[老师给出思路,学员自己完成\]
![](https://img.kancloud.cn/d3/19/d319d892bec67ab2ce12158ca3fb13e8_728x490.png)
![](https://img.kancloud.cn/68/66/6866e4bc25cb0916737a0d4816307e6e_734x502.png)