• 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中的秘钥

  • 相关阅读:
    DB2 关联更新
    postgresql 开启审计日志
    Delphi D10.X中Tpath引发的单元引用及代码编写的思考
    自己写的函数或者过程与Delphi提供的重名了怎么办?(50分)
    技巧四 Delphi XE3 代码自动提示bug解决
    想开发经典界面吗?
    初涉Delphi下Windows消息机制——同一程序内自定义消息实例
    Delphi的DirectShow开发概述
    delphi接口(抄自万一)
    fkInternalCalc和fkCalculated有何区别?
  • 原文地址:https://www.cnblogs.com/yorkyang/p/6530097.html
Copyright © 2020-2023  润新知