0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Golang配置代理方法

马哥Linux运维 来源:博客园sparkdev 2024-11-11 11:17 次阅读

由于一些客观原因的存在,我们开发 Golang 项目的过程总会碰到无法下载某些依赖包的问题。这不是一个小问题,因为你的工作会被打断,即便你使用各种神通解决了问题,很可能这时你的线程已经切换到其他的事情上了(痛恨思路被打断!)。所以最好是一开始我们就重视这个问题,并一劳永逸的解决它。

问题描述

当我们使用 go get、go install、go mod 等命令时,类似于 golang.org/x/... 的包会是无法下载的。比如通过下面的命令下载 sys 包:

$ go get -u golang.org/x/sys

下载肯定会失败:

159224f6-9061-11ef-a511-92fbcf53809c.png

设置代理

如果你有自己的代理服务器,那就很容易了,这也是一劳永逸的方法。直接设置环境变量 http_proxy 和 https_proxy 就行了:

export http_proxy=http://proxyAddress:port
export https_proxy=http://proxyAddress:port

比如笔者在局域网中共享了代理 192.168.21.1:1080:

$ export http_proxy=http://192.168.21.1:1080
$ export https_proxy=http://192.168.21.1:1080

然后执行下面的命令后就能够下载了:

$ go get -u golang.org/x/sys

手动下载并安装包

如果一时找不到合适的代理,还可以临时通过手动的方式下载包。我们常见的 golang.org/x/... 包,一般在 GitHub 上都有官方的镜像仓库对应。比如zieckey/golang.org就是作为 golang.org/x 的镜像库存在的。我们可以手动下载或 clone 对应的 GitHub 仓库到指定的目录下,比如从zieckey/golang.org下载 x 目录下的所有包。或者是每次只下载单个的库,下面的示例演示如何下载 text 库:

$ mkdir $GOPATH/src/golang.org/x
$ cd $GOPATH/src/golang.org/x
$ git clone git@github.com:golang/text.git

当如果需要指定版本的时候,该方法就无解了,因为 GitHub 上的镜像仓库多数都没有 tag。

使用 go mod replace

从 Go 1.11 版本开始,新增支持了 go modules 用于解决包依赖管理问题。该工具提供了 replace,就是为了解决包的别名问题,也能替我们解决 golang.org/x 无法下载的的问题。

go module 被集成到原生的 go mod 命令中,但是如果你的代码库在 $GOPATH 中,module 功能是默认不会开启的,想要开启也非常简单,通过一个环境变量即可开启 export GO111MODULE=on。比如下面的示例,在go.mod中指定下面的代码:

module example.com/demo


require (
    golang.org/x/text v0.3.0
)


replace (
    golang.org/x/text => github.com/golang/text v0.3.0
)

使用 GOPROXY 环境变量

从 Go 1.11 版本开始,官方支持了 go module 包依赖管理工具。其实还新增了 GOPROXY 环境变量。如果设置了该变量,下载源代码时将会通过这个环境变量设置的代理地址,而不再是以前的直接从代码库下载。比如我们可以指定自己的代理地址。

更可喜的是,goproxy.io 这个开源项目帮我们实现好了我们想要的。该项目允许开发者一键构建自己的 GOPROXY 代理服务。同时,也提供了公用的代理服务https://goproxy.io,我们只需设置该环境变量即可正常下载被墙的源码包了:

export GO111MODULE=on
export GOPROXY=https://goproxy.io

也可以通过置空这个环境变量来关闭,export GOPROXY=。

对于 Windows 用户,可以在 PowerShell 中设置:

$env:GOPROXY = "https://goproxy.io"

最后,我们当然推荐使用 GOPROXY 这个环境变量的解决方式,前提是 Go version >= 1.11。

下载 golang.org/x/sys 包:

$ go get -u golang.org/x/sys

15ab71ea-9061-11ef-a511-92fbcf53809c.png

下载到的包在 $GPATH/pkg/mod/golang.org/x/

15c328b2-9061-11ef-a511-92fbcf53809c.png

链接:https://www.cnblogs.com/sparkdev/p/10649159.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    9295

    浏览量

    86006
  • 命令
    +关注

    关注

    5

    文章

    696

    浏览量

    22098
  • 线程
    +关注

    关注

    0

    文章

    505

    浏览量

    19746

原文标题:Golang 配置代理方法

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于Linux内核的透明代理配置方案

    本内容提供了基于Linux内核的透明代理配置方案,先解释为什么要配置透明代理,如何利用Linux内核来实现
    发表于 11-03 16:47 880次阅读

    Golang接口的作用和应用场景

    Golang(Go)作为一门现代的静态类型编程语言,提供了许多强大的特性,其中之一便是接口(interface)。接口是Golang中的一个核心概念,它具有广泛的应用场景,可以帮助开发者实现
    的头像 发表于 12-05 10:44 1172次阅读

    如何使用Golang连接MySQL

    首先我们来看如何使用Golang连接MySQL。
    的头像 发表于 01-08 09:42 3437次阅读
    如何使用<b class='flag-5'>Golang</b>连接MySQL

    Golang怎么实现UTS隔离

    Golang实现UTS隔离
    发表于 08-23 14:44

    Golang爬虫语言接入代理

    HTTP,获取数据4、屏蔽无效请求5、解析数据内容6、储存数据7、使用爬虫代理持续采集以下是golang语言配置爬虫代理代码demo :package mainimport ("net
    发表于 09-09 17:41

    简答几步搭建golang 1.5开发环境

    由于在arm linux上,golang没有提供编译好的二进制可执行文件,需要自己编译一下。golang已经发展到1.5版,从这版开始,所有的东西都是用golang 编译出来的,包括编译器。所以要
    发表于 07-07 10:23

    如何在Golang中实现反向代理

    【导读】在本文中,我们将了解反向代理,它的应用场景以及如何在 Golang 中实现它。 反向代理是位于 Web 服务器前面并将客户端(例如 Web 浏览器)的请求转发到 Web 服务器的服务器。它们
    的头像 发表于 08-23 10:22 2186次阅读

    Linux中如何用vim做golang开发环境

    vim 做 golang 开发环境,多么炫酷!还没尝试过用 vim 做开发环境的同学可以跟着这篇文档把环境搭建起来了! 准备条件,是已经安装好 golang 环境,还需要把 golang 的环境变量
    的头像 发表于 10-08 17:20 1619次阅读

    http代理概述及代码实现方法

    本文详细介绍了Golang 实现 http 代理的实现,在实际业务中有需求的同学可以学起来了!
    的头像 发表于 05-14 15:02 4247次阅读

    初探Golang内联

    今天我们来聊聊 Golang 中的内联。
    的头像 发表于 12-13 09:51 988次阅读

    GoLang的安装和使用

    GoLang的安装和使用
    的头像 发表于 01-13 14:06 1304次阅读
    <b class='flag-5'>GoLang</b>的安装和使用

    Golang实现一个简单的http代理

    本文详细介绍了Golang 实现 http 代理的实现,在实际业务中有需求的同学可以学起来了!
    的头像 发表于 04-10 11:29 1495次阅读

    一个快速应用程序开发(RAD)工具(Golang版)

    SNMPAgent Builder(Golang版)是一个快速应用程序开发(RAD)工具,用于基于Golang 的 SNMP代理开发。提供了一个直观的图形用户界面,用于自动执行各种SNMP
    的头像 发表于 04-13 09:30 1590次阅读

    【芒果派MangoPi MQ Quad】使用Golang点灯

    使用Golang在芒果派上点灯
    的头像 发表于 07-21 14:44 762次阅读
    【芒果派MangoPi MQ Quad】使用<b class='flag-5'>Golang</b>点灯

    鸿蒙OpenHarmony:【配置代理

    新建代理配置文件。
    的头像 发表于 04-29 22:17 856次阅读
    鸿蒙OpenHarmony:【<b class='flag-5'>配置</b><b class='flag-5'>代理</b>】