Go语言自定义包

啥是自定义包

自定义包就是除去网上可下载的三方包外的除去main的包。就像java的类一样。

难点

半天导入不了,自己写的包在main.go或者其他go文件导入不进去。一直报错,网上有很多解决办法,但是大多不是很全面。

解决办法

首先自定义包导入的时候,包名为包所在的文件夹名。为啥是文件夹名嘞,因为Go在build的时候,默认以文件夹名为编译后的文件名。
举例说明:

//文件结构如下
aa-------main.go,go.mod
    |
    |
    -----bb-----test.go
    |
    |
    -----vendor

aa文件夹下有main.go,go.mod,bb,vendor(go mod init, go mod vendor后出现的,保存的是第三方包)文件夹。在bb文件加包含了test.go文件。

第一步,生成go.mod文件

#初始化mod
go mod init
#有三方包的,下载三方包
go mod vendor

会生成一个mod文件,如下所示。有些默认会创建,在ubuntu上不会。

//包名,从src开始算
module aa

go 1.14

//下面是三方包的。使用glide下载到vendor
require (
	github.com/aliyun/aliyun-oss-go-sdk v2.1.1+incompatible
	golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 // indirect
)

第二步,在main.go中导包

//main.go
package main
import "aa/bb"

这样导包,前面的aa是module的名字。bb是test.go所在父目录的名字。可以先在bb文件夹下执行go build 和go install。

第三步,总结

首先需要一个go.mod,导包的包名为包所在文件夹名(前缀为go.mod的module的名字,注意是module,不是文件夹名),访问的时候使用package后面的名字来访问。go.mod执行go mod init即可。不在mian.go同级或者同级子目录下的包似乎不能导包。反正用go.mod不行。

你可能感兴趣的:(GO)