go环境搭建—基于CentOS6.8
1. 背景
在当前的中国网络环境下,我们无法访问Google的服务的,包括Golang.org。从第三方网站下载预编译的二进制Go发行版可能存在第三方源代码注入的风险,例如之前的XcodeGhost。
Go的权威仓库地址是 https://go.googlesource.com/go,同时还有一个镜像仓库在 https://github.com/golang/go (至少在目前,我们还能访问github)
2. 问题
Go1.7的编译过程需要Go1.4的执行文件来实现 bootstrap(自举)(简单来说: Go需要Go自身来编译,搭建go1.5及以上版本的编译环境需要先安装go1.4版本)
3. 解决方案
从Github的Go仓库镜像获取Go的源代码
首先编译Go1.4(只需要gcc和glibc-devel,不需要Go来编译,由此可见go1.4.x 是个特殊的版本!)
使用编译好的Go1.4的二进制文件来编译Go1.6
3.1 准备
- 如果之前已经安装过老版本的Go,清除$GOPATH, $GOROOT变量。
- 安装好Git
- 配置 Git
需要从github上拉代码,得先注册一个github账号(https://github.com)
然后在 linux 执行
> git config --global user.email "email-for-github"
> git config --global user.name "user name"
- 创建SSH key,添加Public Key到Github账号。
> ssh-keygen -t rsa -b 2048
> ssh-add ~/.ssh/id_rsa
复制 ~/.ssh/id_rsa.pub 中的 Public Key 到 github SSH settings 以添加新的 SSH key
- 安装 gcc和glibc-devel
> sudo yum install gcc glibc-devel
3.2 从源代码编译安装Go1.4
- 下载代码
cd /opt
wget https://studygolang.com/dl/golang/go1.4.3.src.tar.gz
tar xvf tar xvf go1.4.3.src.tar.gz
- 编译&安装
cd go/src
./all.bash
cp -rp /opt/go /usr/local/go1.4
- 设置环境变量 GOROOT_BOOTSTRAP
$GOROOT_BOOTSTRAP(默认值是~/go1.4,编译go1.5及以上版本必需)
vim /etc/profile
# Golang Env
export GOROOT_BOOTSTRAP=/usr/local/go1.4
export PATH=$PATH:$GOROOT_BOOTSTRAP
source /etc/profile
3.3 从源代码编译安装Go1.11
- 下载代码
wget https://studygolang.com/dl/golang/go1.11.src.tar.gz
mkdir /opt/mygo
tar xvf go1.11.src.tar.gz -C /opt/mygo
- 编译&安装
cd /opt/mygo/go/src
./all.bash
cp -rp /opt/mygo/go /usr/local/go
- 设置环境变量
vim /etc/profile
在 # Golang Env 下添加
export GOROOT=/usr/local/go
#提前创建 go 工作目录
mkdir /opt/goWork
在 /etc/profile 添加环境变量
export GOPATH=/opt/goWork
export GOBIN=$GOROOT/bin
vim /etc/profile
修改 /etc/profile 中的PATH 环境变量
export PATH=$PATH:$GOROOT_BOOTSTRAP:$GOPATH:$GOBIN
source /etc/profile
注:
- Go二进制文件默认安装到 /usr/local/go,自定义安装目录时,必须设置GOROOT环境变量
- GOPATH允许多个目录(一个项目一个),当有多个目录时,请注意分隔符,多个目录的时候Windows是分号,Linux系统是冒号,当有多个GOPATH时,默认会将go get的内容放在第一个目录下
工作目录介绍
工作区是一个目录层次结构,它的根目录有三个目录:
src 包含Go源文件
pkg 包含对象和包
bin 包含可执行命令
Go工具创建源码包并安装二进制文件到pkg和bin目录下
src目录通常包含多个版本控制库(如Git或Mercurial),跟踪一个或多个源包的开发
- 测试
退出shell重新登录
go version
go version go1.7 linux/amd64
4. go 工作目录
所有Go可执行程序都通过静态方式链接在一起,所以在运行时是不需要相关的包对象(库)
go install 会把库文件 xxx.a 放到 $GOPATH/pkg 相应的 arch 下面,这样 go命令可以直接找到对应的包对象,避免不必要的重复编译
linux_amd64是为了根据操作系统和你的系统架构交叉编译
当你建立工作空间目录后,你需要把工作空间目录的路径添加的GOPATH环境变量中。GOPATH环境变量支持多个值,如果你有多个工作空间,可以把多个工作空间值都添加到这个环境变量中,window系统使用分号";"分隔不同值,Linux或Unix系统使用冒号”:“分隔不同值。另外,还要将所有工作空间的bin路径添加到PATH环境变量中
当然,如果你的工作空间不止一个,PATH变量中不能直接使用$GOPATH/bin,要分别将各个工作空间中的bin路径添加进去。
需要注意的是,GOPATH环境变量的值不能与安装的go目录相同。go目录中同样有src、pkg、bin等类似工作空间的目录结构,不过其中包含的是go的标准模块,最好不要讲自己的工作空间和go目录混合
通常 项目代码目录 建成 $GOPATH/src/github.com/ [ nsq ] 的形式
5. package 引用
默认
先会到 $GOROOT/src 下查找
其次到 $GOPATH/src 下查找
$GOPATH/src 下的目录结构最好跟 github 上保持一致,方便拉取github上的代码
参考资料:
https://github.com/northbright/Notes/blob/master/Golang/china/install-go1.6-from-source-on-centos7-in-china.md
https://github.com/northbright/Notes/tree/master/Golang/china
http://www.cnblogs.com/mountaingeek/p/5951156.html
go 源码下载
https://studygolang.com/dl
http://www.golangtc.com/download
遇到的问题
1.

解决:ssh-add ~/.ssh/id_rsa
ssh-add命令是把专用密钥添加到ssh-agent的高速缓存中。该命令位置在/usr/bin/ssh-add
ssh-add -l 查看ssh-agent中的秘钥
go环境搭建—基于CentOS6.8的更多相关文章
- lamp环境搭建(centos6.9+apache2.4+mysql5.7+php7.1)
lamp环境搭建(centos6.9+apache2.4+mysql5.7+php7.1) 安装前准备:CentOS 6.9 64位 最小化安装 yum install -y make gcc gcc ...
- Lamp环境搭建Linux CentOS6.5编译安装mysql5.6
经典web开发组合Lamp环境搭建之mysql安装详解 安装前准备 通过rpm命令检查centos上是否已经安装mysql,然后卸载已经存在的mysql版本 [root@localhost src]# ...
- 【Hadoop环境搭建】Centos6.8搭建hadoop伪分布模式
阅读目录 ~/.ssh/authorized_keys 把公钥加到用于认证的公钥文件中,authorized_keys是用于认证的公钥文件 方式2: (未测试,应该可用) 基于空口令创建新的SSH密钥 ...
- selenium2环境搭建----基于python语言
selenium支持多种语言如java.c#.Python.PHP等,这里基于python语言,所以这里搭建环境时需做俩步操作: ----1.Python环境的搭建 ----2.selenium的安装 ...
- java selenium (三) 环境搭建 基于Maven
现在Java的大部分项目都是基于Maven, 在Maven项目中使用Selenium2. 非常简单. 首先你需要配置好Maven的环境 可以参考本博客的Maven教程系列,Maven入门教程(一) ...
- k8s环境搭建--基于kubeadm方法
环境 master node: 数量 1, 系统 ubuntu 16.04_amd64 worker node: 数量 1, 系统 ubuntu 16.04_amd64 kubernetes 版本: ...
- STM32开发/烧录/调试环境搭建 基于:Win10+STM32Cube+openocd+cmsis-dap(dap-link)
dap-link是个不错的STM32下载/调试工具,然而STM32Cube并没有直接支持它,只能通过openocd的方式间接支持. 网络上虽然已经有了其他人的教程,不过基本都是基于linux或者msy ...
- k8s环境搭建--基于minik8s方法
minik8s 安装 关闭selinux.开启ipv6 sudo bash selinux_ipv6.sh 下载kubectl和minikube 下载minikube,因为国外的源被墙了,所以只能用阿 ...
- Maven 项目使用mybatis的环境搭建-基于xml形式实现查询所有的功能
首先了解一下什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. ...
随机推荐
- MANIFEST.MF的用途
可以用的上的有: 1. Main-Class 指定程序的入口,这样可以直接用java -jar xxx.jar来运行程序. 2. Class-Path 指定jar包的依赖关系,class loader ...
- cp命令取消提示的方法
Linux默认cp命令带参数-i如果有重复的文件会提示覆盖 查看cp别名 在大量复制的时候这个提示不友好,在脚本写复制命令也无法使用交互式输入 解决办法 1,修改别名 vi ~/.bashrc 注释掉 ...
- Thread和Runable的区别、Synchronized锁关键字
一.Thread和Runable的区别 Thread是基类,子类必继承他实现其run方法.其也是实现了Runable接口.Thread是普通的类,并非抽象类或者密封类等. Runnable是接口,子类 ...
- ZOJ 3983 - Crusaders Quest - [DFS]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3983 题意: 给出一个长度为 $9$ 的字符串 $s$,且 $s ...
- HDFS架构详解-非官档
Namenode 1.namenode是一个中心服务器,单一节点(简化系统的设计和实现),负责管理文件系统的命名空间(namespace)以及客户端对文件的访问. 2.文件操作:namenode负责对 ...
- HashMap实现原理分析(面试问题:两个hashcode相同 的对象怎么存入hashmap的)
1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1 ...
- linux系统java的安装
(一)下载java8 下载链接:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...
- [python-opencv] 模糊操作
@不要在奋斗的年纪 选择安逸 均值模糊 中值模糊 自定义模糊 意义与应用场景 模糊的基本原理: 1.基于离散卷积 2.定义好每个卷积核 3.不同卷积核得到不同的卷积效果 4.模糊是卷积的一种表象 #均 ...
- ARP报文
硬件类型:指明了发送方想知道的硬件接口类型,以太网的值为1: 协议类型:指明了发送方提供的高层协议类型,IP为0x0800(16进制): 硬件地址长度和协议长度:指明了硬件地址和高层协议地址的长度,这 ...
- RESTful URL设计指南(转)
add by zhj: <RESTful Web Services Cookbook>这本书详细介绍了RESTFUL API的设计. 一般来说,一个好的URL,简单明了.这里有一个问题,对 ...