gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:29:53 25 4
gpt4 key购买 nike

所以我第一次开发了一个 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 应该是我正在处理的项目目录。但是我担心以模块化的方式保存我的项目和库包,这样当我以后有一个完全不同的项目(即 project-aurora)时,它可能使用相同的 github 帮助程序包,它们不会被下载两次,都在火星项目和极光项目。

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

更新: 并不是我不能编译它们。我可以使用 GOPATH 作为我的项目目录并使用 src、pkg、bin 项目布局并重新组织文件,最后编译项目。是的。但是我的问题是解决这种单一的GOPATH方式出现的common package redundancy问题。

最佳答案

请阅读How to Write Go Code小心。它解释了你需要知道的一切。

您不使用 GOPATH 作为您的项目目录。假设您想使用标准的 Go 工具,您的包源需要位于与其导入路径对应的目录中,就像任何其他包一样。

您的项目应该位于$GOPATH/src/project-mars,可以通过go install project-mars 构建。 helper 包应该位于 $GOPATH/src/project-mars/helper,并通过 "project-mars/helper" 导入。

关于go - 如何导入项目特定的 go 包,同时为完全不同的项目通用的 go 包维护一个单独的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35999277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com