GO语言:使用项目目录中自定义的包

本文介绍了在Go语言中如何在项目目录中使用自定义包,包括解决不能导入自定义包的问题,涉及到GO111MODULE环境变量的设置,以及在导入和调用时应注意的文件夹名与包名的对应规则。同时,强调了导出方法的首字母大写规则,并提供了相关资源链接进行深入学习。
摘要由CSDN通过智能技术生成

GO:使用项目中文件夹里的自定义包

刚开始学习GO语言,想要在代码中使用项目文件夹中自定义的包,碰到了一些问题,已经解决了。希望能够帮助碰到同样问题的朋友。

2021.8.12更新:详细的包管理介绍还有版本控制见以下链接:
https://xie.infoq.cn/article/641f6d8632d99e6775e00bc5e

问题描述
想要在GO中尝试面向对象,在项目中建立多个包,随后通过主函数调用这些包。项目day2的文件结构如下:
项目结构
在main()函数中调用string文件夹与array文件夹中的方法。

实验环境:
win10 + GO1.16

//mod文件  运行go mod init day2
module day2
go 1.16

main.go

package main

import (
	"day2/array"
	str "day2/string"
	"fmt"
)

func main() {
	fmt.Println("我是主函数中的输出")
	str.Package_str()
	array.Package_array()
}


错误1
could not import day2/string (cannot find package “day2/string” in any of F:\GO\src\day2\string (from $GOROOT)
F\src\day2\array (from $GOPATH)

找不到指示的包,默认模式下import的包总是在GOPATH的目录中查找,项目也需要放在GOPATH/src中。(cmd 中 go env 查看环境)
从GO1.11开始,包管理不再局限于GOPATH,可以通过mod更灵活地管理包与包版本。高版本的GO中引入了vendor属性,通过环境变量GO111MODULE控制。可以理解为这个属性控制go编译时,默认先从项目源码目录中查找代码,如果找到,则不会到GOPATH寻找。
还进一步推出包管理工具——Godep、Govendor、godm、Go Modules。

GO111MODULE的设置参数

  • =auto 。自动,项目在$GOPATH/src里会使用$GOPATH/src的依赖包,在$GOPATH/src外,就使用go.mod 里 require的包
  • =on 开启,go1.12后,无论在$GOPATH/src里还是在外面,都会使用go.mod 里 require的包
  • =off 关闭,即为默认模式

解决方法
增加一个新的环境变量——GO111MODULE,值设置为auto或者on。允许在GOPATH外部寻找包。

此电脑—》右键,属性—》高级系统设置—》环境变量—》添加环境变量


错误2
在解决了上述错误之后,出现了另外一个错误。
could not import day2/str (no required module provides package “day2/str”)

原因是在项目中我建立了文件夹string,里面的包名是str。一开始的调用语句是:

import (
	"day2/str"
	"fmt"
)

以为是通过包名调用,结果找不到。经过尝试,发现需要的是文件夹名称,而文件夹中的包名一般会成为我们调用的名字。例如:
我们文件夹叫string,包名叫str,导入的时候使用day2/string,但是调用是用包名str调用——str.Package_str()。所以,为了避免出错,最好统一文件夹名称和包名。

解决方法

import (
	str "day2/string"
	"fmt"
)

day2/string ==> mod初始化的包名 / 调用目标的文件夹名

另外,注意导出的方法是需要首字母大写。不然会报错。


总结

如果想在GO中使用自己写的包或者尝试使用面向对象编写代码。

  1. 首先,在环境变量中将GO111MODULE设置为on
  2. 然后,在项目主目录中执行 go mod init 项目名 初始化mod
  3. 新建类文件夹后,在里面写package。(类对象)
  4. 在main.go调用是,import的路径是 : mod模块名称/项目文件夹名称(与main同级)/类文件夹名称(包的代码)/包名称;

参考:
go modules介绍:
https://studygolang.com/articles/22391
GOPATH的使用介绍:
https://juejin.cn/post/6844903808942735368

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值