Go 是Google开发的一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
go 安装
到 https://golang.org/dl/ 下载最新版本的编译好的GoLang(国内好像打不开哦),并进行完整性验证,然后解压即可运行。1
2
3wget -c https://storage.googleapis.com/golang/go1.12.9.linux-amd64.tar.gz
shasum -a 256 go1.12.9.linux-amd64.tar.gz
tar -xvzf go1.12.9.linux-amd64.tar.gz
添加环境变量1
2
3export PATH=$PATH:/path/go/bin
export GOPATH="/path/go/src"
export GOBIN="/path/go/bin"
检测安装情况1
go version
用go env
来察看相关路径设置是否正确。
go module使用
go module
是go官方在go1.11版本引进的,用来管理包的依赖关系,可以通过版本号来进行迭代,通过go.mod
来管理项目依赖的模块。
其go.mod
格式如下:1
2
3
4
5
6
7
8
9
10
11
12
13module github.com/martian-lang/martian
go 1.12
require (
github.com/cloudfoundry/gosigar v1.1.0
github.com/dustin/go-humanize v0.0.0-20180713052910-9f541cc9db5d
github.com/google/shlex v0.0.0-20150127133951-6f45313302b9
github.com/martian-lang/docopt.go v0.0.0-20180828184714-57cc8f5f669d
github.com/satori/go.uuid v1.1.1-0.20160713180306-0aa62d5ddceb
github.com/golang/sys v0.0.0-20190209173611-3b5209105503
github.com/golang/tools v0.0.0-20190219175448-49d818b07734
)
module
用来定义项目的模块名字。go 1.12
用来表示,项目使用的go版本。require
用来表示项目引用的模块和模块对应的版本号。
一个模块是由一组相关的软件包组成的一个单元,如下:
go项目通常放到src目录中。
如同CRAN 和 CPAN,go module也有对应仓库,主要是golang.org
(官方仓库),https://goproxy.io/
(最大代理仓库)和github
。
golang.org
类似于python安装module仅需pip install XXX
,perl仅需cpanm XXX
和R仅需library("XXX")
一样,go module的安装也可以通过命令直接安装。
如尝试安装 sys
module:1
go get -u golang.org/x/sys
但结果却是报错,不应该啊,网上各种教程甚至官网都是写的这样下载啊:1
2go: golang.org/x/sys@v0.0.0-20190209173611-3b5209105503: unrecognized import path "golang.org/x/sys" (https fetch: Get https://golang.org/x/sys?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
go: error loading module requirements
(┬_┬)因为万恶的墙,go是Google开发的……..,难道不能用了吗?goproxy.io
和github
就是救世主。
goproxy.io
官网一张图看下 goproxy.io 的作用:解救我们于水生火热中……..
1 | # 开启 go modules 特征 |
然后重新下载所需module即可1
go get -u golang.org/x/sys
github
两种方式:
将github相关仓库 git clone
到 gopath/src/golang.org/x/
目录下,然后cd 到相应目录执行go install golang.org/x/sys
;1
2
3
4mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
git clone https://github.com/golang/sys.git sys
go install golang.org/x/sys
执行go install之后没有提示,就说明安装好了。
或者直接1
go get -u -v gitlab.com/groupName/projectName
总结有效办法是将所需module的go.mod
文件中的任何golang.org
指定替换为相应的github
位置。
我的 Go 环境如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26GOARCH="amd64"
GOBIN="/public/home/zpxu/software/go/bin"
GOCACHE="/public/home/zpxu/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/public/home/zpxu/software/go/src"
GOPROXY="https://goproxy.io"
GORACE=""
GOROOT="/public/home/zpxu/software/go"
GOTMPDIR=""
GOTOOLDIR="/public/home/zpxu/software/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/public/home/zpxu/software/cellranger/martian/go.mod"
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 -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build473583117=/tmp/go-build -gno-record-gcc-switches"
参考资料
- How to Install GoLang (Go Programming Language) in Linux
- Go中的modules初步使用