一篇解决!小白迷惑:Go mod本地包导入

最近在学习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 

在这里写我们的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"
}

此时的项目树:

一篇解决!小白迷惑:Go mod本地包导入_第1张图片

 此时根据官网的描述:

一篇解决!小白迷惑:Go mod本地包导入_第2张图片

大概的意思呢就是说你虽然写好了你自己的包,但是如果要被Golang使用,还需要发布到go的存储库,在那里go才能下载到你的包,所以我们需要发布我们的模块,go才能在本地找到它

接着我们执行:

go mod edit -replace zhihong.com/mymod=./mymod

此时我们的go mod多了一条重定向

一篇解决!小白迷惑:Go mod本地包导入_第3张图片

 此时还需要运行go mod tidy命令来同步你模块的依赖项

 此时我们的go mod  (数字表示我们的版本信息)

一篇解决!小白迷惑:Go mod本地包导入_第4张图片

 此时我们执行我们的main.go

程序已经正确执行了!

还有最后提一点,如果你遇到这个错误:cannot refer to unexported name

 这里是因为go语法中如果是变量或者函数是小写字母开头,那么它只能在包内使用,要大写字母开头才能够在别的包中使用

你可能感兴趣的:(golang,开发语言,后端)