go的包管理学习

go如何使用自己写的包?

1.goroot

go分两个重要的路径,GOROOT和GOPATH
GOROOT路径指的是go安装的位置,包含go的编译器相关的文档,一般来说只需要配个环境变量就不需要考虑了。

2.gopath

GOPATH指的是工作目录。在windows平台上,默认的位置是C:\Users\用户名\go。
gopath是干嘛的呢,就是所有的go项目应该都在gopath路径下。

gopath目录下必须又一个src文件夹,所有的项目都在这个src文件夹下,当编译项目时,还会生成pkg文件夹和bin文件夹,bin文件夹生成编译后的exe文件,pkg文件夹打包了exe文件所需的包,存储预编译的目标文件,以加快程序的后续编译速度。

项目:一个项目会包含很多个文件和目录,目录下又有目录和文件,项目路径指的是包含所有这些文件和目录的目录路径。
比如在c盘新建一个目录projectA,然后在projectA下新建一个main.go文件,再新建一个目录controller,controller目录下又新建controller.go。那么c://projectA就是项目路径。所以gopath路径下不仅包含bin、pkg、src目录,还有所有go项目的包文件。这些包文件很容易造成混乱,比如两个不同的版本冲突。

在旧的go里,不推荐在c盘下建立新项目,新项目最好在gopath路径下,当然,gopath路径可以设置成很多个。

在一个go项目中,也不能随便建立目录,首先,在gopath下新建一个src目录,代码全部都要放在src目录下。比如以上的例子projectA下不能直接新建main.go文件,必须创建一个src目录,然后在src目录下新建main.go。项目下载的依赖包都会下载到giopath目录下,

一个日常的test项目的结构如下:
在这里插入图片描述
那么main.go要如何调用config.go中的函数呢?

  1. test在gopath目录下
  2. main.go导入config.go所在的目录名,也就是路径。注意是目录名,不是文件名(如果工程目录不在gopath目录下就找不到这个目录)。如下:
    在这里插入图片描述
    3.根据 包名.函数名 调用函数。假设config.go下有一个函数funcTest()。如何在main.go中调用这个函数呢?首先查看config.go所属的包,也就是第一含的package xxx(建议跟所属的目录名一样,但是可以不一样),假设是package myconfig,在main中就得写出myconfig.funcTest().

go的找包原理:

首先会去找gopath路径,然后在gopath路径下找src目录,最后在src目录下寻找import中指定的路径。所以说,要导入一个包,必须从项目名开始写起,直到包的目录。
参考:Go项目的目录结构

go在打包时打包的路径为main.go所在的目录名

go的导包也太过麻烦了,所以现在由另外的导包方式,一是根据相对路径找包。第二就是go modules了。这个还没时间研究,搞不懂。
参考:
Go Modules 详解
关于Go Modules,看这一篇文章就够了

猜你喜欢

转载自blog.csdn.net/qq_39286701/article/details/121863194