Golang中如何为每个仓库单独设置GOPRIVATE

Golang中如何为每个仓库单独设置GOPRIVATE 我们在处理 go.mod 中的 replace 指令和 GOPRIVATE 环境变量时遇到了一些问题。我们非常希望 GOPRIVATE 能基于每个代码库进行设置,例如使用类似 .env 这样的文件,而不是全局的、针对每个用户的设置。有没有一种好的方法来实现这一点,而不需要一大堆繁琐的操作?或者,有没有一种好的方式可以向 Go 团队提交功能请求,以支持 .env 文件?

欢迎提出建议!

4 回复

也许你可以考虑使用一个更好的集成开发环境。 例如,Goland 可以为不同的项目处理不同的环境变量。

更多关于Golang中如何为每个仓库单独设置GOPRIVATE的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在一个混合团队中,这确实不是一个可行的选择,因为我们尽量不对团队使用的工具做出硬性规定,那样做显得很专横。而且,你休想从我手中夺走 Zed。😄

此外,总的来说,强制使用特定的 IDE 来获得合理的行为,对于一门语言来说并不是很好的设计方法。我寻求的是无论开发环境如何都能工作的方案,而不仅仅是为一小部分开发者服务。我们希望我们的代码能通过简单的 git clone && go build 来运行。不幸的是,看起来目前并没有一个完美的解决方案。

func main() {
    fmt.Println("hello world")
}

你在说什么胡话?我讨论的是IDE解决方案,这是针对个人开发者的解决方案,是一个选项。正如你所说,如果不需要规定团队使用什么工具,那么如何找到问题的解决方案就取决于他自己。unamused

如果你是这个团队的负责人,那么你应该为团队成员提供几个操作指南供他们选择。同样地,如果他不愿意采纳你的解决方案,那是他自己的事。你不是他们的保姆,他们会处理好这些事情,要相信他们。

除非你编写一套CLI工具(例如,包装go命令,读取当前目录的git配置,然后根据配置文件自动设置环境变量),否则这个问题无法解决。但这种包装工具并不好用,我见过一些包装git工具的垃圾东西,它们确实没什么用。

在我看来,为了提高个人开发效率,我自然愿意使用更方便的方式来处理这类我不想太操心的事情。

在Go语言中,GOPRIVATE 环境变量目前是全局设置,无法通过类似 .env 的文件为每个仓库单独配置。不过,可以通过一些方法实现类似的效果。

一种常见做法是在项目根目录创建脚本文件,在运行Go命令前设置环境变量。例如,创建 go-private.sh

#!/bin/bash
export GOPRIVATE=github.com/yourcompany/*
go "$@"

然后使用 ./go-private.sh mod tidy./go-private.sh build 执行命令。

另一种方法是在Makefile中封装Go命令:

.PHONY: build test

export GOPRIVATE=github.com/yourcompany/*

build:
    go build ./...

test:
    go test ./...

对于IDE支持,可以在VS Code的 .vscode/settings.json 中配置:

{
    "go.toolsEnvVars": {
        "GOPRIVATE": "github.com/yourcompany/*"
    }
}

如果希望Go原生支持仓库级配置,可以通过以下方式提交功能请求:

  1. 在Go项目的GitHub仓库提交Issue:https://github.com/golang/go/issues
  2. 使用Go提案流程:在 https://github.com/golang/proposal 提交设计文档
  3. 在Go论坛讨论:https://groups.google.com/g/golang-dev

提案可以建议在 go.mod 中添加 private 指令,例如:

module github.com/yourcompany/project

go 1.21

private github.com/yourcompany/*

或者支持读取 .env.goprivate 文件。这样的功能需要社区讨论和提案评审流程。

回到顶部