最近在学习go,在导入本都包遇到一个问题,根据网上许多教程来都走不通,最后在官网得到了最正确的答案。官网教程:Call your code from another module – The Go Programming Language (google.cn)
在golang 1.11之后加入了go mod来替代GOPATH,传统的go项目需要将包导入到$GOPATH/src目录下,比较麻烦,有了go mod 就可以在任意目录下导入自己的包了
1.首先创建一个工作目录
2.初始化一下我们的go mod
go mod init <project_name>
在这里写我们的main.go
package main
import (
"fmt"
my "zhihong.com/mymod"
//my "go_package_test/mypackage"
)
func main(){
fmt.Println("This is main")
flag :=my.SayHello();
fmt.Println(flag)
//my.hello()
//my.Talk()
}
3.然后,我们创建我们的包,这个目录的名字和package名一样
mkdir mymod
cd mymod
go mod init test //这里会自动导入该包所以依赖的第三方包
vim hello.go
hello.go
package mymod
import "fmt"
func SayHello()string{
fmt.Println("hello,(print in mymod)")
return "success"
}
此时的项目树:
此时根据官网的描述:
大概的意思呢就是说你虽然写好了你自己的包,但是如果要被Golang使用,还需要发布到go的存储库,在那里go才能下载到你的包,所以我们需要发布我们的模块,go才能在本地找到它
接着我们执行:
go mod edit -replace zhihong.com/mymod=./mymod
此时我们的go mod多了一条重定向
此时还需要运行go mod tidy命令来同步你模块的依赖项
此时我们的go mod (数字表示我们的版本信息)
此时我们执行我们的main.go
程序已经正确执行了!
还有最后提一点,如果你遇到这个错误:cannot refer to unexported name
这里是因为go语法中如果是变量或者函数是小写字母开头,那么它只能在包内使用,要大写字母开头才能够在别的包中使用
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114951.html