go package、import、go.mod 理解 以及 私有包引入

前言

相信很多刚学go的同学都被这几个搞得一头雾水,我也是。。。现在理解了之后写下这篇文章,如果有什么不正确的地方希望能够指出一定改正哈哈哈…

详解

当项目中有 go.mod 时,使用 go modules 管理,反之使用 旧的 GOPATH 和 vendor机制。这里针对的是含go.mod的项目

package、import、go.mod

1.package是Go中用于包声明语句的关键字。如果是命令源码文件的话必须是main,但如果不是的话可以随便取,但是最好最好最好是和目录名一致! 这样方便定位以及使用

关于package的最佳实践:
package is folder.
package name is folder name.
package path is folder path.

2 . import引入的私有包的名字可以随意取(因为可以用replace代替,后面会讲),但是最好和引入包的目录名字相同,方便定位以及使用。引入公共包时,必须 要类似 github.com/yourname/xxx,gitee.com/yourname/xxx这种,否则编译的时候会找不到包!

3 . 被引入的其他项目的包,必须要存在 go.mod文件,否则编译时会提示
go: proj666@v0.0.0: parsing ..\..\proj2\go.mod: open c:\go_work\github.com\xxx\proj2\go.mod: The system cannot find the file specified.
为什么必须要go.mod文件呢?
因为你引入的这个包,可能还引入了其他的包,而这些被引入的其他的包及其版本信息都会记录在go.mod中,这样在编译时就能通过这个go.mod来拉取其他被引用的包。通过重用 go.mod 文件实现按版本维护这些直接和间接依赖

4 . 之前没有 go modules时,import可以使用相对路径,例如

import (
	"./vendor"
)

这样写之后 编译时 会去 $GOPATH/src中查找文件。
如果在含有go.mod不允许使用相对路径!!!

5 . 生成go.mod的命令如下

go mod init xxx

xxx是模块的命名,xxx就是我们说的项目依赖路径,通常来说该地址就是项目的仓库地址,所有需要引用项目包的地址都填写这个地址,无论是内部之间引用还是外部引用。
也即是说,在项目 启用了 go modules 之后,引用包必须跟 go mod 文件第一行包名一样,

私有包引入步骤

分为三种情况:

第一种:被引入.go文件和引入.go文件处于同一项目,同一目录下
举个特别点的例子
假设现在 两个文件 go1.go , go2.go 在 project 根目录下
go1.go 和 go2.gopackage 都应当是 main
这个时候加入go1.go想引入 go2.go中的good()函数,只需要
直接 good() 即可 (这其实就相当于他们都在同一个类里,只不过不同的方法)
在编译时,一定要记得是  go build *.go 否则会提示

command-line-arguments
.\go1.go:10:2: undefined: good

第二种:被引入.go文件和引入.go文件处于同一项目不同目录下
假设现在 两个文件 go1.go 在 project/logs 目录下 , go2.go 在 project/utils 目录下
这个时候假如go1.go想引入 go2.go中的Good()函数,只需要
import "project的模块名加目标package名 例如 github.com/xxx/project/utils"
//最后直接引用即可
utils.Good()

导入这个包的地方是 模块内的绝对路径,就是要从go.mod所在的目录开始。

第三种:被引入.go文件和引入.go文件处于不同项目
假设现在 两个文件 go1.go 在 project1 目录下 , go2.go 在 project2 目录下
这个时候加入go1.go想引入 go2.go中的Good()函数,只需要
import "project2"

然后在 project1的 go.mod 中添加
require project2 v.0.0.0
replace project2 => c:/project2 //这一步是引入本地的某个项目,如果是github上的话不需要replace

//最后直接引用即可
project2.Good()
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值