类比C/C++使用头文件导入带有函数声明的*.h/*.hpp文件不同,go语言对于包的定义更加方便,以golang为例,go语言有着自己的GOPATH目录结构,即为在工程下有三个文件夹,分别是bin、pkg、src

 首先在golang下新建完自己的go工程以后,在依次新建bin、pkg、src目录

 

在src目录下新建一个我们自己定义的tools包

 并且在tools包中新建一个go文件用于写咱们自己创建的的函数

 注意:go语言使用package来说明文件属于哪一个包

 定义了一个hello的无参函数在print.go中         注:这个方法有问题,等一下会做说明

 我们就定义好了自己写的一个包以及方法,接下来我们可以在这个工程中的任何位置调用使用它,比如我在src下,又建立了一个tools的测试类toolsText,并且写了一个测试函数demo

 让我们导入刚才写的tools包

 在实现包中的方法

可是此时程序报错,提示无法解析我们写的hello方法,问题出在哪里呢?

命名

go语言和c语言不同,

命名如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 private )

所以如果我们想要写方法供包外的函数使用,我们需要将首字母大写,否则小写开头的函数只能在包内部使用。

解决方法

将之前写的hello方法改名为Hello方法即可

 测试用例也需要更改

现在函数就不报错了,可以正常使用,运行一下 

成功在其他的包内运行在tools中写的函数

呢么如果在tools目录外,可以构件tools包中的函数吗?

让我们来测试一下

我们在src下创建了另一个目录notools,并且创建了一个叫notools的go文件

在其中输入了如下内容        注:package所命名的包为tools,也就是说这个函数仍然属于tools包

回到demo中直接使用tools调用它

 

报错了,依旧是函数未解析,为什么呢?

因为Add这个函数是我们定义在tools包,notools目录下的,

所以import命令我们不是直接导入具体的包而是存放包的目录,

呢么我们怎么样才能正确使用notools目录下的tools包呢?

让我们导入notools目录

 

 Add方法依旧报错,为什么呢?

因为当前引入了两个tools包,导致文件冲突,我们改变包名或者删掉之前的”tools目录“就可以运行了

 删除tools后

 程序正常运行,