Golang 入门 : 配置代理
由于一些客观原因的存在,我们开发 Golang 项目的过程总会碰到无法下载某些依赖包的问题。这不是一个小问题,因为你的工作会被打断,即便你使用各种神通解决了问题,很可能这时你的线程已经切换到其他的事情上了(痛恨思路被打断!)。所以最好是一开始我们就重视这个问题,并一劳永逸的解决它。
问题描述
当我们使用 go get、go install、go mod 等命令时,类似于 golang.org/x/... 的包会是无法下载的。比如通过下面的命令下载 sys 包:
$ go get -u golang.org/x/sys
下载肯定会失败:

设置代理
如果你有自己的代理服务器,那就很容易了,这也是一劳永逸的方法。直接设置环境变量 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

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

Golang 入门 : 配置代理的更多相关文章
- Golang入门(1):安装与配置环境变量的意义
摘要 在几年前学习Java的时候,环境的配置就会劝退一部分的初学者.而对于Golang来说,也需要从环境的配置开始学起.这一篇文章将从如何安装Golang开始讲起,随后将会提到Golang中的环境变量 ...
- Golang项目的配置管理——Viper简易入门配置
Golang项目的配置管理--Viper简易入门配置 What is Viper? From:https://github.com/spf13/viper Viper is a complete co ...
- Java程序员的Golang入门指南(上)
Java程序员的Golang入门指南 1.序言 Golang作为一门出身名门望族的编程语言新星,像豆瓣的Redis平台Codis.类Evernote的云笔记leanote等. 1.1 为什么要学习 如 ...
- CEPH集群操作入门--配置
参考文档:CEPH官网集群操作文档 概述 Ceph存储集群是所有Ceph部署的基础. 基于RADOS,Ceph存储集群由两种类型的守护进程组成:Ceph OSD守护进程(OSD)将数据作为对象 ...
- Golang入门(4):并发
摘要 并发程序指同时进行多个任务的程序,随着硬件的发展,并发程序变得越来越重要.Web服务器会一次处理成千上万的请求,这也是并发的必要性之一.Golang的并发控制比起Java来说,简单了不少.在Go ...
- Golang入门(3):一天学完GO的进阶语法
摘要 在上一篇文章中,我们聊了聊Golang中的一些基础的语法,如变量的定义.条件语句.循环语句等等.他们和其他语言很相似,我们只需要看一看它们之间的区别,就差不多可以掌握了,所以作者称它们为&quo ...
- Golang入门(2):一天学完GO的基本语法
摘要 在配置好环境之后,要研究的就是这个语言的语法了.在这篇文章中,作者希望可以简单的介绍一下Golang的各种语法,并与C和Java作一些简单的对比以加深记忆.因为这篇文章只是入门Golang的第二 ...
- golang 入门之环境搭建
[安装运行时] 直接上官网下载运行时安装即可:golang 官网 根据自己操作系统选择 golang 运行时版本,例如windows 当然我们也可以直接选择下面的稳定版本进行下载 下载安装后,安装程序 ...
- [Golang] 一个简易代理池
晚上写了一个代理池,就是在一个代理网站上爬取代理ip和端口以及测试是否可用.接下来可能考虑扩展成一个比较大的 golang实现的代理池. 简易版代码: package main import ( &q ...
随机推荐
- 【Vue.js】加载更多—vue-infinite-scroll
引言 今天用到了一个加载更多的插件,用起来很方便,插件的名字叫做vue-infinite-scroll 我们可以去npmjs.com官网看一下这个vue-infinite-scroll的用法,官网上面 ...
- Docker跨主机通信(九)--技术流ken
容器网络 在前面的博客中已经详细讲解了几种网络方案: none, host, bridge,user-defined.但是他们只是解决了单个主机间的容器的通信问题,并不能实现多个主机容器之间的通信.本 ...
- 服务器配置用户信息、ssh免密码登录和防火墙等安全配置
一.登录服务器 1.回到根目录 cd ~ 2.ssh + 用户名@服务器公网地址 ssh root@47.94.208.76 3.输入密码:注意输入法大小写 二.查看服务 ...
- Smobiler 4.4已正式发布!(Smobiler能让你在Visual Studio上开发APP)
Smobiler 4.4已经正式发布,还不快来看看?原文地址:https://www.smobiler.com/portal.php?mod=view&aid=53这次更新要感谢我们的用户,在 ...
- 研发团队如何写好API接口文档
导读 背景 痛点在哪? 为什么要写接口文档? API规范 接口工具 总结 背景 随着业务的发展,支撑组的项目也是越来越多.同时,从整个支撑组项目架构体系(含运维和运营体系),我们对系统业 ...
- [转]快速新建简单的koa2后端服务
本文转自:https://blog.csdn.net/saucxs/article/details/83788259 既然前端工程化是基于NodeJS,那么选择NodeJs做前后端分离部署也是理所应当 ...
- 零基础学Python--------进阶篇 第6章 函数
第6章 函数 6.1函数的创建和调用 提到函数,大家会想到数学函数吧,函数是数学最重要的一个模块,贯穿整个数学学习过程.在Python中,函数的应用非常广泛.在前面我们已经多次接触过函数.例如,用于输 ...
- HTML的概念和三大基石以及标准文档结构
HTML的概念: 概念: HTML:超文本标记语言 作用: 需要将java在后台根据用户请求处理的请求结果在浏览器中显示给用户. 在浏览器中数据需要使用友好的格式展示给用户. HTML是告诉浏 ...
- html的标签分类————可以上传的数据篇
html的标签可以分为: 块级标签:div(白板),H系列(加大加粗,H1—H7,字体一般逐渐变小,一般用作标题),p标签(段落之间有间距) 行内标签:span(白板) 此外,标签之间是可以嵌套的.为 ...
- KeePass全网最详使用指南
从入门到熟练:KeePass全网最详使用指南 https://post.smzdm.com/p/713042/