在企业代理环境下如何设置Golang的GOPROXY指向golang.io

在企业代理环境下如何设置Golang的GOPROXY指向golang.io 大家好!我的公司有企业代理,我们需要为 npm 和 git 设置相同的代理。由于已经设置好了,如果我需要添加 GOPROXY=https://goproxy.io,direct,我会收到错误,因为请求没有发送到公司本地代理,而本地代理会重定向到 goproxy.io。我理解这是直接向 goproxy.io 发送请求。

但对于我这种情况,在中国工作,使用公司内部代理,我无法解决。我可以在家里的电脑上设置相同的配置,并且它工作正常,因为没有企业代理。希望能得到一些建议。谢谢

2 回复

我不太确定这是否同样适用于对 GOPROXY 的请求,不过 Go 标准库中的大多数函数都遵循 HTTP_PROXYHTTPS_PROXY 环境变量。

因此,我猜测 go 命令本身也会这样做。

更多关于在企业代理环境下如何设置Golang的GOPROXY指向golang.io的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在企业代理环境下,你需要通过环境变量让Go工具链的HTTP客户端使用公司代理。以下是解决方案:

1. 设置代理环境变量:

# Windows (PowerShell)
$env:HTTP_PROXY="http://公司代理地址:端口"
$env:HTTPS_PROXY="http://公司代理地址:端口"

# Linux/macOS
export HTTP_PROXY="http://公司代理地址:端口"
export HTTPS_PROXY="http://公司代理地址:端口"

2. 配置GOPROXY:

# 设置GOPROXY,direct会通过上述代理访问
export GOPROXY="https://goproxy.io,direct"

3. 完整的环境变量配置示例:

// 验证代理设置的测试程序
package main

import (
    "fmt"
    "net/http"
    "os"
)

func main() {
    // 检查环境变量
    fmt.Println("HTTP_PROXY:", os.Getenv("HTTP_PROXY"))
    fmt.Println("HTTPS_PROXY:", os.Getenv("HTTPS_PROXY"))
    fmt.Println("GOPROXY:", os.Getenv("GOPROXY"))
    
    // 测试网络连接
    resp, err := http.Get("https://goproxy.io")
    if err != nil {
        fmt.Println("请求失败:", err)
        return
    }
    defer resp.Body.Close()
    fmt.Println("代理连接成功")
}

4. 如果公司代理需要认证:

export HTTP_PROXY="http://用户名:密码@代理地址:端口"
export HTTPS_PROXY="http://用户名:密码@代理地址:端口"

5. 永久配置(Linux/macOS的.bashrc或.zshrc):

# 添加到shell配置文件
echo 'export HTTP_PROXY="http://公司代理地址:端口"' >> ~/.bashrc
echo 'export HTTPS_PROXY="http://公司代理地址:端口"' >> ~/.bashrc
echo 'export GOPROXY="https://goproxy.io,direct"' >> ~/.bashrc
source ~/.bashrc

6. Go模块的额外配置:

# 如果仍然有问题,可以设置GOPRIVATE排除内部模块
export GOPRIVATE="*.公司内部域名.com"
# 强制Go命令使用代理
export GONOSUMDB="*.公司内部域名.com"

这样配置后,所有Go工具(go get、go mod等)的HTTP请求都会通过公司代理,包括访问goproxy.io的请求。

回到顶部