Go 编程基础 开发环境搭建 01

homebrew安装go

brew install go
==> Downloading https://homebrew.bintray.com/bottles/go-1.10.1.high_sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring go-1.10.1.high_sierra.bottle.tar.gz
==> Caveats
A valid GOPATH is required to use the `go get` command.
If $GOPATH is not specified, $HOME/go will be used by default:
  https://golang.org/doc/code.html#GOPATH

You may wish to add the GOROOT-based install location to your PATH:
  export PATH=$PATH:/usr/local/opt/go/libexec/bin
==> Summary
🍺  /usr/local/Cellar/go/1.10.1: 8,158 files, 336.7MB

/usr/local/Cellar/go/1.10.1 便是go的安装目录

配置GOPATH

查看go 的环境变量设置的命令

go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/ailuoy/Library/Caches/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/ailuoy/go"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.10.1/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.10.1/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/bl/dwsjmyzd4dd8ffw7x4znzjqc0000gn/T/go-build195524019=/tmp/go-build -gno-record-gcc-switches -fno-common"

需要设置的环境变量包括:GOPATH ,GOBIN 以及把GOBIN加入到PATH中,GOROOT变量默认已经设置好。

在fishshell设置GOPATH

set -gx GOPATH /usr/local/Cellar/go/1.10.1

在bash中设置

vim .bash_profile
export GOPATH=/usr/local/Cellar/go/1.10.1
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
source .bash_profile

再次查看 go env

go env
GOARCH="amd64"
GOBIN="/usr/local/Cellar/go/1.10.1/bin"
GOCACHE="/Users/ailuoy/Library/Caches/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/usr/local/Cellar/go/1.10.1"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.10.1/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.10.1/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/bl/dwsjmyzd4dd8ffw7x4znzjqc0000gn/T/go-build666917042=/tmp/go-build -gno-record-gcc-switches -fno-common"

Goland的配置

激活服务器

http://idea.youbbs.org

下载主题 Material Theme UI

file

file

设置go版本

Preferences->Go->GOROOT设置,这里我用的是gvm来管理我的版本(目录在~/.gvm/gos下)

快捷键

  • command + T 编译当前文件

centos安装go[目前还未编译成功...]

由于1.5以上的版本源码安装需要1.4的编译器编译

安装依赖

yum install gcc glibc-devel -y

安装1.4版本go

cd /usr/local/src
wget https://dl.google.com/go/go1.4.3.src.tar.gz
tar -zxvf  go1.4.3.src.tar.gz -C /root/
mv /root/go/ /root/go1.4
cd /root/go1.4/src
./all.bash

设置1.4环境变量

echo "export PATH=$PATH:/root/go1.4/bin" >> /etc/profile
echo "export GOROOT=/root/go1.4" >> /etc/profile
source /etc/profile
go version
go version go1.4.3 linux/amd64

安装10.2版本go

wget https://dl.google.com/go/go1.8.1.src.tar.gz
tar -zxvf go1.8.1.src.tar.gz -C /usr/local
cd /usr/local/go/src
./all.bash

遇到的错误 go tool dist: FAILED: /root/go1.4/bin/go install -gcflags=-...

Building Go cmd/dist using /root/go1.4.
Building Go toolchain1 using /root/go1.4.
go build bootstrap/cmd/compile/internal/ssa: /root/go1.4/pkg/tool/linux_amd64/6g: signal: killed
go tool dist: FAILED: /root/go1.4/bin/go install -gcflags=-l -tags=math_big_pure_go compiler_bootstrap bootstrap/cmd/...: exit status 1

内存不足,至少需要1G的内存类构建包...增加内存这里是

exec_linux_test.go:116: Cmd failed with err fork/exec /usr/bin/whoami

在编译1.10.2版本的时候会发生这个错误,不知道为啥.没有解决,所以最终选择了1.8.1

exec_linux_test.go:116: Cmd failed with err fork/exec /usr/bin/whoami

gvm安装go

安装gvm

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

错误

Could not find bison
yum install bison -y

替换国内源

https://go.googlesource.com/go

vim ~/.gvm/scripts/install
GO_SOURCE_URL=https://github.com/golang/go

查看版本

$ gvm version
Go Version Manager v1.0.22 installed at /Users/ailuoy/.gvm

安装go

// 先安装1.4,因为1.5版本的安装编译依赖1.4
gvm install go1.4 -B
// 安装1.10.2
gvm install go1.10.2 -B

切换

gvm install go1.10.2 --default

Linux安装go

下载安装

wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz
sudo tar -zxvf go1.11.2.linux-amd64.tar.gz -C /usr/local
cd /usr/local/go
bin/go version
go version go1.11.2 linux/amd64
  • 版本 1.11.2
  • 环境 linux
  • 计算机架构 amd64(64位)

设置环境变量

  • ~/bash_profile 单一用户
  • /etc/profile 所有用户

  • GOROOT Go语言的安装目录
  • GOPATH Go语言工作区的集合,也就是Go语言的工作目录
  • GOBIN 存放Go可执行的文件(编译之后的文件)
export GOROOT=/usr/local/go
export GOPATH=~/golib:~/goproject
export GOBIN=~/gobin

设置Linux PATH

为了方便使用go语言命令和go程序的可执行文件,需要追加其值,保证,在任何地方都使用go

export PATH=$PATH:$GOROOT/bin:$GOBIN

常用概念和定义

  • 工作区和GOPATH
  • 源码文件的分类和含义
  • 代码包相关知识
工作区和GOPATH
  • 工作区防止go源码文件和目录
  • 一般情况下,go源码文件都需要存放到工作区中
  • 但是对于命令文件来说(编译之后的文件),这不是必须的
工作区的结构

/home/account/golib

  • src/ 用于存放源码文件,类似与composer的vendor
  • pkg/ 用于存放归档文件(名称以.a为后缀的文件)
  • bin/ 存放go可执行文件

参考文献

CentOS7.3编译安装go1.8.1 使用gvm管理多版本golang

交叉编译

Mac 下编译 Linux 和 Windows 64位可执行程序

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Linux 下编译 Mac 和 Windows 64位可执行程序

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Windows 下编译 Mac 和 Linux 64位可执行程序

SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go