go语言成为2016年TIOBE年度语言,距离上次TIOBE年度语言至今已经过去7年,在过去的7年里,go语言也得到了广泛的应用,尤其是在开源领域,从docker到kubernetes都使用了go作为开发语言。在这系列文章中,我们将一起来由浅入深学习一下go语言,至少在研究这些流行的开源软件更加得心应手一些。
背景
go语言是由google在2009年11月10日发布的一门全新的语言,支持面向对象和反射机制,具有接近于c的运行速度,远远快于c和c++的编译速度,近似脚本语言的灵活。当然和总多流行语言一样,有着众多坚定的支持者和不屑一顾的反对者,但是从它诞生到现在,发展和扩散的速度一直很快也是不争的事实。
特点
go语言具有很多的特点,将一部分主要特点列举如下:
项番 | 详细内容 |
No.1 | 静态编译型语言 |
No.2 | 语法简洁,趋近于脚本化 |
No.3 | 跨平台支持 |
No.4 | 自动垃圾回收机制 |
No.5 | 具有并发变成模型和机制(goroutine等) |
No.6 | 支持多种编程风格,支持面向对象 |
No.7 | 无继承层次的轻量级方式 |
No.8 | 全面的工具支持 |
No.9 | 统一的代码风格以及自己的代码格式化工具 |
No.10 | 编译和运行速度飞快 |
No.11 | 总多的标准库 |
No.12 | … |
安装
安装非常简单,只需要下载/解压/设定环境变量即可,本系列文章中使用CentOS,整体相关相差无几,仅仅在于安装时的package/以及环境变量的设定方式的OS的差别而已。
项目 | 详细信息 |
下载地址 | |
下载版本 | 1.7.5 |
OS | Linux |
OS bit | 64bit |
二进制链接 | https://storage.googleapis.com/golang/go1.7.5.linux-amd64.tar.gz |
安装命令:
cd /usr/local
wget https://storage.googleapis.com/golang/go1.7.5.linux-amd64.tar.gz
gunzip -dc go1.7.5.linux-amd64.tar.gz |tar xvf -
环境变量
go只需要设定GOROOT和PATH即可,在CentOS如下设定即可对全用户有效。
[root@liumiaocn ~]# tail -n2 /etc/profile
export GOROOT=/usr/local/go
export PATH=$PATH:${GOROOT}/bin
[root@liumiaocn ~]#
结果确认
[root@liumiaocn ~]# echo $GOROOT
/usr/local/go
[root@liumiaocn ~]# which go
/usr/local/go/bin/go
[root@liumiaocn ~]#
除了GOROOT和PATH的环境变量,GO还有其他一些环境变量,入门阶段可以不作深入确认,在后面的学习中将会慢慢展开,如上安装之后,相关的环境变量信息如下所示:
项目 | 设定内容 |
GOARCH | “amd64” |
GOBIN | “” |
GOEXE | “” |
GOHOSTARCH | “amd64” |
GOHOSTOS | “linux” |
GOOS | “linux” |
GOPATH | “” |
GORACE | “” |
GOROOT | “/usr/local/go” |
GOTOOLDIR | “/usr/local/go/pkg/tool/linux_amd64” |
CC | “gcc” |
GOGCCFLAGS | “-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build703746769=/tmp/go-build -gno-record-gcc-switches” |
CXX | “g++” |
CGO_ENABLED | “1” |
版本确认
使用如下命令,可以确认所安装的版本为go1.7.5,安装则正常完成了。
[root@liumiaocn ~]# go version
go version go1.7.5 linux/amd64
[root@liumiaocn ~]#
安装详细
解压后,go1.7.5被gunzip到/usr/local/go下,详细的信息如下所示:
[root@liumiaocn go]# pwd
/usr/local/go
[root@liumiaocn go]# ls -l
total 132
drwxr-xr-x. 2 root root 4096 Jan 26 12:43 api
-rw-r--r--. 1 root root 29041 Jan 26 12:43 AUTHORS
drwxr-xr-x. 2 root root 39 Jan 26 12:48 bin
drwxr-xr-x. 4 root root 35 Jan 26 12:48 blog
-rw-r--r--. 1 root root 1168 Jan 26 12:43 CONTRIBUTING.md
-rw-r--r--. 1 root root 40192 Jan 26 12:43 CONTRIBUTORS
drwxr-xr-x. 8 root root 4096 Jan 26 12:43 doc
-rw-r--r--. 1 root root 5686 Jan 26 12:43 favicon.ico
drwxr-xr-x. 3 root root 17 Jan 26 12:43 lib
-rw-r--r--. 1 root root 1479 Jan 26 12:43 LICENSE
drwxr-xr-x. 14 root root 4096 Jan 26 12:48 misc
-rw-r--r--. 1 root root 1303 Jan 26 12:43 PATENTS
drwxr-xr-x. 7 root root 82 Jan 26 12:48 pkg
-rw-r--r--. 1 root root 1638 Jan 26 12:43 README.md
-rw-r--r--. 1 root root 26 Jan 26 12:43 robots.txt
drwxr-xr-x. 45 root root 4096 Jan 26 12:43 src
drwxr-xr-x. 18 root root 8192 Jan 26 12:48 test
-rw-r--r--. 1 root root 7 Jan 26 12:43 VERSION
[root@liumiaocn go]#
对经常可能用到的文件夹,进行简单说明如下:
项目 | 详细说明 |
api | go各个版本的api,保存在go1.1.txt到go1.7.txt7个文件中。except.txt保存即将废弃的api,而next.txt保存着下个版本将会出现的内容 |
bin | 相关的可执行文件,缺省会有go/gofmt/godoc |
doc | 离线官方文档和说明 |
misc | 各IDE的插件等 |
pkg | go标准库的归档文件 |
src | 源码 |
test | 测试代码 |
C语言的经验者
有C语言的经验的开发者中可以从下面的比较中快速上手。
http://hyperpolyglot.org/c
总结
通过本文可以简单了解go的特点以及如何在centos上安装go1.7.5,以及安装后各目录的作用。