本地使用Golang项目的技巧与指南
本地使用Golang项目的技巧与指南 (我是Go语言新手)
如果我不想使用 go get 来安装库,而是想将代码库克隆到本地使用,我需要怎么做?
我的 GOPATH 是 /home/reik/go
仅仅将克隆的代码库放到 /home/reik/go 目录下,然后进入 /home/reik/go/hep/(hep是代码库名称)并执行 go build 是行不通的。
[reik@reik-msi hep]$ go build
can't load package: package hep: code in directory /home/reik/go/src/hep expects import "go-hep.org/x/hep"
使用 go get 也不行:
[reik@reik-msi hep]$ go get
go get: warning: modules disabled by GO111MODULE=auto in GOPATH/src;
ignoring go.mod;
see 'go help modules'
can't load package: package hep: code in directory /home/reik/go/src/hep expects import "go-hep.org/x/hep"
查看 go-hep.org/x/hep 这个导入路径,这是否意味着这个库无法在本地构建?
更多关于本地使用Golang项目的技巧与指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html
在传统方式中,您可以将克隆的代码库放置在 /your_project_name/vendor 目录下。
更多关于本地使用Golang项目的技巧与指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
是的,虽然可能是相同的,但最好保持清晰。也许项目的名称应该与其他包的名称不同。在我看来,没有理由让两个不同的东西使用相同的名称。
是的,你可以这样做。但如果你想在项目中使用自定义版本的 hep,正如所指出的那样,采用供应商模式可能是个不错的选择。
// 代码示例保留原文
Pratyush_Das:
GOPATH/src/go-hep.org/x/hep/vendor/hep
是的,你应该有这样的路径结构 GOPATH/src/your_project_name/vendor/other_package_name
在你的示例中,your_project_name 和 other_package_name 能否相同?我的意思是……它们实际上是同一个包。your_project_name 是通过 go-get 安装的,而 other_package_name 是本地保存的同一个包。
codekid:
你好,你没有尝试将代码库克隆到 $GOPATH,而是试了
=>
go get go-hep.org/x/hep这会将包下载到
/home/reik/go/src
但这是否意味着我可以通过 go get 安装后修改源代码并重新构建?
那么…/your_project_name/vendor/ 是否必须放在我的 GOPATH 中?
例如在这种情况下,
核心包位于 GOPATH/src/go-hep.org/x/hep,那么包含我本地修改的包是否应该放在 GOPATH/src/go-hep.org/x/hep/vendor/hep?
codekid:
是的,你可以。
在包的根目录下使用 go build 命令吗?在这个例子中就是 GOPATH/src/go-hep.org/x/hep?
根据你的描述,问题在于代码库的导入路径与实际目录结构不匹配。当你在本地克隆代码库时,需要确保目录结构符合Go的导入路径规范。
在你的情况下,go-hep.org/x/hep 这个导入路径意味着代码应该位于 $GOPATH/src/go-hep.org/x/hep 目录下。
以下是解决方案:
正确的目录结构
将代码库克隆到正确的路径:
# 创建正确的目录结构
mkdir -p /home/reik/go/src/go-hep.org/x
# 进入目录
cd /home/reik/go/src/go-hep.org/x
# 克隆代码库
git clone https://github.com/go-hep/hep.git hep
或者直接克隆到正确位置:
cd /home/reik/go/src
mkdir -p go-hep.org/x
cd go-hep.org/x
git clone https://github.com/go-hep/hep.git
构建代码
现在进入正确的目录构建:
cd /home/reik/go/src/go-hep.org/x/hep
go build
使用Go Modules(推荐方案)
更好的方法是启用Go Modules,这样就不需要依赖GOPATH:
# 在任何目录启用Go Modules
export GO111MODULE=on
# 创建新目录并初始化模块
mkdir myproject
cd myproject
go mod init myproject
# 然后你可以直接使用go get
go get go-hep.org/x/hep
或者在现有项目中:
# 在项目根目录初始化模块
go mod init your-project-name
go mod tidy
验证导入
创建一个测试文件验证导入是否正常工作:
// main.go
package main
import (
"fmt"
"go-hep.org/x/hep/fit"
)
func main() {
fmt.Println("HEP library imported successfully")
// 使用库中的功能
_ = fit.NewCurve1D(nil)
}
然后构建:
go build main.go
关键点是确保目录结构匹配导入路径。对于 go-hep.org/x/hep,目录必须是 $GOPATH/src/go-hep.org/x/hep 或者使用Go Modules来管理依赖。


