我刚开始使用Go的模块,无法建立build而感到困惑

刚开始使用Go模块时遇到了编译不通过的困难。

完成Hello World后,我想当会有一个时刻,你会希望将在main.go中定义的函数切分到另一个目录中。
那个时候,由于构建无法通过,解决问题花费了一些时间。
如果不使用go module,在GOPATH下创建项目目录和使用go的modules时,外部包的调用路径指定方式是不同的。目前,网络上的信息更多是旧的信息,
我认为这是一个相当大的盲点,所以我将其留作备忘录。

$ go version
>> go version go1.13.4 darwin/amd64

什么让你感到困扰?

piyo
├── go.mod
├── go.sum
└── main.go
package main
import "fmt"

main(){
    hoge()
    fuga()
    return nil
}

func hoge() {
    fmt.Println("hogehoge")
}

func fuga() {
    fmt.Println("fugafuga")
}

我希望将如上所述的项目,按照下面的方式,将函数分割到另一个目录中。

piyo
├── go.mod
├── go.sum
├── main.go
└── cmd
    ├── hoge.go
    └── fuga.go

因此,我按以下方式进行了文件分割。

package main
import (
    "fmt"
    "./cmd"
)
main(){
    cmd.hoge()
    cmd.fuga()
    return nil
}
package cmd
func Hoge() { // パッケージ外部から呼ばれるので関数名の先頭を大文字にする。
    fmt.Println("hogehoge")
}
package cmd
func Fuga() { // パッケージ外部から呼ばれるので関数名の先頭を大文字にする。
    fmt.Println("fugafuga")
}

在这里进行构建时报错,无法完成构建!

$ go build
>> build _/Users/username/workspace_golang/github.com/username/piyo/cmd: cannot find module for path _/Users/username/workspace_golang/github.com/username/piyo/cmd

找不到路径中的模块…意思是无法找到piyo目录…

说到结论,如果使用绝对路径而不是相对路径导入包,那么构建就会成功通过!

再試一下用更详细的方式重述。

使用Go模块

从Go 11.1开始,我们可以使用模块(modules)功能。

我想,详细的内容可以在各种文章和官方文件中找到。但是与以前不同的是,现在无论在GOPATH之外还是在外部,都可以使用外部包。

由于必须在GOPATH目录下创建项目目录,这显得有些不方便,我认为将这个功能纳入是一个不错的选择。

$ mkdir workspace_golang
$ cd workspace_golang
$ mkdir piyo
$ cd piyo
$ go mod init github.com/username/piyo

我在GOPATH之外的家目录下创建了一个名为workspace_golang的学习目录,并在其中创建了项目目录。

通过编译的main.go文件。

package main
import (
    "fmt"
    - "./cmd"
    + "github.com/username/piyo/cmd
)
main(){
    cmd.hoge()
    cmd.fuga()
    return nil
}

这是非常重要的。

使用Go模块时,当从外部包调用函数等时,务必使用绝对路径进行调用!

广告
将在 10 秒后关闭
bannerAds