有一工程如下:

工程

model包中的student.go源码:

student.go

student.go声明了一个Student的结构体,由于“Student”的首字母是大写的,因此也可以用在其他包中。下面是main包中用Student结构体的实例代码:

main.go

很显然,这是可以正常输出的。

但是,如果model包中的结构体名字是小写的呢?

就像这样:

首字母小写的student

首字母小写代表private,此时main包就没办法这样用了。如果实在要用的话,就得用到:

工厂模式。

如下图,model包中定义了一个函数,注意首字母是大写的,表示是public的,main包亦可调用此函数。

工厂模式

main包调用方式如下图所示:

main包调用public函数

这样就可以正常使用了。需要注意的是,这个public函数返回的是一个指针。

这里又引出了一个问题:

如果结构体中的变量名是小写字母开头的,那么main包中就无法用"结构体对象.变量"来正常输出了,该怎么解决这个问题呢?

可以用方法来对外输出我们想要的变量:

student的getScore()方法
stu.getScore()

这里getScore()方法调用时出错了,因为方法名的首字母需要大写,main包才能使用。改完后如下图:

stu.GetScore()

这样才能正常使用,输出:

输出