类比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后
程序正常运行,