如何导入项目特定的 go 包,同时为完全不同的项目通用的 go 包保留一个单独的位置?

所以我第一次开发了一个 go 应用程序。我开始知道有两个变量 GOROOT 和 GOPATH 用于维护 go 包。到目前为止,我的理解是 GOROOT 用于 go 二进制文件,而 GOPATH 主要用于存储项目所需的库和帮助程序包。


这是我目前的项目结构 -


/Users/john/work/project-mars

/Users/john/work/project-mars/main.go

/Users/john/work/project-mars/helper

/Users/john/work/project-mars/helper/helper.go

main.go 的内容


package main


import (

    "fmt"

    "helper"

)


func main(){

    fmt.Println("Hello")

}

helper.go 的内容


package helper


import (

    "fmt"

)


func SayWorld(){

    fmt.Println("World")

}

而 go 变量是 -


GOROOT = /Users/john/apps/go

GOPATH = /Users/john/apps/go-packages

问题: 现在,当我执行以下命令时,出现此错误 -


mac-machine:project-mars john$ go build main.go 

main.go:5:5: cannot find package "helper" in any of:

    /Users/john/apps/go/src/helper (from $GOROOT)

    /Users/john/apps/go-packages/src/helper (from $GOPATH)

我知道 GOPATH 应该是我正在处理的项目目录。但是我担心以模块化方式保持我的项目和库包,以便以后我有一个完全不同的项目(即项目极光)可能使用相同的 github 帮助包时,它们不会被下载两次,都在project-mars 和 project-aurora 。


在处理不同项目时如何避免这种冗余?


更新:并不是我不能编译它们。我可以使用 GOPATH 作为我的项目目录并使用 src、pkg、bin 项目布局,并重新组织文件并最终编译项目。伊伊皮。但我的问题是关于解决以这种单一的 GOPATH 方式出现的常见包问题的冗余。


缥缈止盈
浏览 163回答 2
2回答

梦里花落0921

请仔细阅读如何编写 Go 代码。它解释了您需要知道的一切。您不用GOPATH作项目目录。假设您想使用标准的 Go 工具,您的包源需要位于与其导入路径对应的目录中,就像任何其他包一样。您的项目应该位于$GOPATH/src/project-mars,可以通过go install project-mars. 该helper包应位于$GOPATH/src/project-mars/helper,并通过 导入"project-mars/helper"。

三国纷争

将您的helper-lib文件夹重命名为helper然后把这个文件夹从project-mars移动到上层文件夹work这应该使您的import "helper"main.go 工作中的语句。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go