问题标签 [go-build]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
go - 不允许使用内部包
我正在尝试构建和运行一个存储库(https://github.com/hyperledger/fabric/tree/master),但是这个错误不断出现,我仍然没有找到解决方案。
这只是导致此错误的众多文件之一。我很确定我做错了什么,因为这个 repo 应该是有效的。
去版本:
操作系统:Linux Mint 19.2 肉桂
go - 如何使用 github.com/mattn/go-sqlite3 为 Google Cloud VM 交叉编译 Go 包?
这个问题与cross compile OSX to linux 的 go-sqlite3 编译器参数相同,但由于该问题没有答案,我将再次尝试询问。我有一个使用github.com/mattn/go-sqlite3 SQLite3 驱动程序的 Go 包,类似于以下内容:
但是,如果我尝试在启用 CGO 的情况下为 Linux AMD64 编译它(根据 SQLite3 的要求),我会收到以下错误:
同样,如果我按照 https://github.com/mattn/go-sqlite3#linux 中的说明进行指定--tags "linux"
,我会收到以下错误:
如何在我的 MacOS (Darwin AMD64) 笔记本电脑上交叉编译此包以在 Google Cloud Linux VM 上运行?
git - 在推送到远程版本控制之前检查以确保项目编译
我有一个用于 TypeScript 项目的脚本,可确保我的代码在我将其推送到远程之前编译:
当我在一天结束时或在拉取请求之前将代码推送到我的功能分支时,该脚本工作得非常好——它有助于防止不必要的提交,但也使它变得容易。
使用 Go,我只想在将 go 项目推送到远程之前检查所有内容是否编译。
Go build 是检查整个项目编译的最佳选择,还是查找所有 go 包并编译每个包的更通用方法?我想对于有多个未链接在一起的包的项目,那么您将不得不遍历每个包并分别编译它们?
go - 无法实例化提供程序 - Terraform Cloud 的自定义提供程序 - [fork/exec - exec 格式错误]
我正在尝试为 Terraform 构建 AWS 自定义提供程序。
提供程序位于此存储库中:https ://github.com/lyle-nel/terraform-provider-aws 我已按照自述文件中的所有说明创建提供程序二进制文件。
我遵循了有关如何为 Terraform 云构建和配置自定义提供程序的说明:https ://www.terraform.io/docs/cloud/run/install-software.html#custom-and-community-providers
所以基本上,我将我的二进制文件放在以下目录结构中,以便 Terraform Cloud 获取它:terraform.d/plugins/linux_amd64/。
但是,当我使用已编译的二进制文件运行我的 repo 时,我在 Terraform 云上收到此错误:
错误:无法实例化提供程序“aws”以获取架构:fork/exec /terraform/aws_tf/terraform.d/plugins/linux_amd64/terraform-provider-aws: exec 格式错误
我用谷歌搜索了一下,我发现我必须静态编译二进制文件并指定架构,我用这个命令做到了:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -a -ldflags '-w -extldflags "-static"'
如果我运行文件来获取二进制文件的详细信息,它会将其显示为静态链接file terraform-provider-aws: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
但在 Terraform Cloud 上,它仍然返回相同的错误。
我首先在我正在使用的操作系统 Linux Mint 19.3 上构建了二进制文件,当它不起作用时,我创建了一个 Ubuntu 18.04 VM 并在那里尝试[因为文档说 Terraform Cloud 在 Ubuntu 上运行,所以我认为它会有所作为],但仍然没有运气。
如果有人以前这样做过,或者谁知道我哪里弄错了,请帮助我。我在这里失去理智。
go - 无法编译包含子模块的 Golang 项目
我有一个带有一个 git 子模块的 Golang 项目,如下所示:
项目
- 去.mod
- main.go
- 配置文件
- go-blockchain/ (git 子模块)
- 去.mod
- 加密/
- encode.go(里面有 cgo 代码)
- 加密货币.go
- main.go
当我go build
在顶层运行时,我收到如下错误:
# github.com/blockchain/go-blockchain/crypto
/Users/niceguy/.go/pkg/mod/github.com/blockchain/go-blockchain@v0.0.0-20200320145517-cea8009ba7ee/crypto/encode.go:86:2:无法确定 C.crypto_encode_pair 的名称类型
/Users/niceguy/.go/pkg/mod/github.com/blockchain/go-blockchain@v0.0.0-20200320145517-cea8009ba7ee/crypto/encode.go:80:2:无法确定 C.crypto_encode_from_seed 的名称类型
/Users/niceguy/.go/pkg/mod/github.com/blockchain/go-blockchain@v0.0.0-20200320145517-cea8009ba7ee/crypto/encode.go:115:9:无法确定 C.crypto_encode_proof_to_hash 的名称类型
问题似乎是我更喜欢缓存而不是 CGO 库,这些库是在 go-blockchain 文件夹中构建并存回的。
建议?
go - 获取主要版本模块依赖项时出错
我有一个可执行的 go 模块,我正在尝试执行以下命令
并得到这个错误:
number-manipulation是一个不可执行的 go 模块,带有以下标签 v1.0.0、v1.0.1 和 v2.0.0。
我是新来的。所以有人请告诉我这里有什么问题。
带主包的模块
应用程序.go
去.mod
go 版本 go1.14.3 darwin/amd64
去环境
我试过 set GO111MODULE=on; 但这不会改变 GO111MODULE 的值
go - 如果我想构建可执行文件,是否应该始终从主包的文件夹运行构建?
我对 Go 的构建过程有一个简单的问题。
我有一个非常简单的应用程序,可能是最简单的,其结构如下
与 main.go 存在
从文件夹中myapp
我运行命令go build -o bin/main main/main.go
并且一切正常。
不,我决定在要调用doStuff()
的包中创建一个新函数,但我想将它放在不同的文件中。所以应用程序的新结构是main
main()
stuff.go
与main.go
存在
和stuff.go
存在
如果我现在尝试运行相同的构建命令go build -o bin/main main/main.go
,我会收到错误消息main/main.go:4:2: undefined: doStuff
。
但是,如果我进入该main
文件夹并从那里运行该命令go build -o ../bin/main
一切正常。
这种行为的原因是什么?如果我想创建一个可执行文件,我应该总是go build
从文件夹中运行命令吗?main()
go - go build 不会将本地更改编译到 main
我比较陌生,我在 go build 系统上遇到了一些问题。
GO环境:
我的目录结构如下:
我使用克隆的项目“ coredhcp ”和“ go-immutable-radix ”git clone
我对“ go-immutable-radix ”项目进行了一些更改并添加了日志,但是,我无法将本地更改构建到使用此“ go-immutable-radix ”项目的“ coredhcp ”项目中。
关于如何通过 go build 将“A”项目中的本地更改编译为“X”项目的任何建议。
go - 使用“go build”进行交叉编译时提取目标文件时出现问题
我正在尝试创建一个 go.o 目标文件,我将使用外部链接器进行链接。我按照gopher-os程序提取目标文件。
main.go:
生成文件:
当我调用时make go.o
,我在终端中收到以下消息:
go.o文件确实在目录中创建,但对该build/
文件的任何进一步使用都不会导致我的工作进一步取得成功。
我试过设置CGO_ENABLED
,0
但1
似乎没有任何影响。
go - 如何防止`go build`更新最新版本的模块
我在一个大型项目中使用了一个名为“ yaegi ”的开源项目。
我需要使用旧版本的 "yaegi": v.0.8.11
,所以我修改了go.mod
文件并替换了:
github.com/traefik/yaegi v0.9.2 // indirect
但是github.com/containous/yaegi v0.8.11
当我构建项目时,它开始更新所有模块并将其替换回最新版本:
如何防止它并使用旧版本保留它v.0.8.11
?
我根据https://tip.golang.org/cmd/go/#hdr-Maintaining_module_requirements阅读:
go
命令本身会自动更新go.mod
文件以保持标准格式和require
语句的准确性。任何找到不熟悉的导入的 go 命令都会查找包含该导入的模块,并自动将该模块的最新版本添加到 go.mod 中。[…]
任何 go 命令都可以确定缺少模块要求并且必须添加 […]。
也许有办法绕过它?