问题标签 [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.

0 投票
2 回答
23312 浏览

go - 不允许使用内部包

我正在尝试构建和运行一个存储库(https://github.com/hyperledger/fabric/tree/master),但是这个错误不断出现,我仍然没有找到解决方案。

这只是导致此错误的众多文件之一。我很确定我做错了什么,因为这个 repo 应该是有效的。

去版本:

操作系统:Linux Mint 19.2 肉桂

0 投票
1 回答
1666 浏览

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 上运行?

0 投票
1 回答
332 浏览

git - 在推送到远程版本控制之前检查以确保项目编译

我有一个用于 TypeScript 项目的脚本,可确保我的代码在我将其推送到远程之前编译:

当我在一天结束时或在拉取请求之前将代码推送到我的功能分支时,该脚本工作得非常好——它有助于防止不必要的提交,但也使它变得容易。

使用 Go,我只想在将 go 项目推送到远程之前检查所有内容是否编译。

Go build 是检查整个项目编译的最佳选择,还是查找所有 go 包并编译每个包的更通用方法?我想对于有多个未链接在一起的包的项目,那么您将不得不遍历每个包并分别编译它们?

0 投票
1 回答
2631 浏览

go - 无法实例化提供程序 - Terraform Cloud 的自定义提供程序 - [fork/exec - exec 格式错误]

我正在尝试为 Terraform 构建 AWS 自定义提供程序

  1. 提供程序位于此存储库中:https ://github.com/lyle-nel/terraform-provider-aws 我已按照自述文件中的所有说明创建提供程序二进制文件。

  2. 我遵循了有关如何为 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 上运行,所以我认为它会有所作为],但仍然没有运气。

如果有人以前这样做过,或者谁知道我哪里弄错了,请帮助我。我在这里失去理智。

0 投票
0 回答
383 浏览

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 文件夹中构建并存回的。

建议?

0 投票
1 回答
2708 浏览

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 的值

0 投票
1 回答
52 浏览

go - 如果我想构建可执行文件,是否应该始终从主包的文件夹运行构建?

我对 Go 的构建过程有一个简单的问题。

我有一个非常简单的应用程序,可能是最简单的,其结构如下

与 main.go 存在

从文件夹中myapp我运行命令go build -o bin/main main/main.go并且一切正常。

不,我决定在要调用doStuff()的包中创建一个新函数,但我想将它放在不同的文件中。所以应用程序的新结构是mainmain()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()

0 投票
1 回答
229 浏览

go - go build 不会将本地更改编译到 main

我比较陌生,我在 go build 系统上遇到了一些问题。

GO环境:

我的目录结构如下:

我使用克隆的项目“ coredhcp ”和“ go-immutable-radix ”git clone

我对“ go-immutable-radix ”项目进行了一些更改并添加了日志,但是,我无法将本地更改构建到使用此“ go-immutable-radix ”项目的“ coredhcp ”项目中。

关于如何通过 go build 将“A”项目中的本地更改编译为“X”项目的任何建议。

0 投票
0 回答
46 浏览

go - 使用“go build”进行交叉编译时提取目标文件时出现问题

我正在尝试创建一个 go.o 目标文件,我将使用外部链接器进行链接。我按照gopher-os程序提取目标文件。

main.go:

生成文件:

当我调用时make go.o,我在终端中收到以下消息:

go.o文件确实在目录中创建,但对该build/文件的任何进一步使用都不会导致我的工作进一步取得成功。

我试过设置CGO_ENABLED01似乎没有任何影响。

0 投票
1 回答
1326 浏览

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 命令都可以确定缺少模块要求并且必须添加 […]。

也许有办法绕过它?