go语言安装与使用

语言特点

go语言为静态编译类型、编译型的开源语言,脚本化的语言,支持多种编程范式,原生的并发编程支持。

源码安装

https://golang.org/dl/ 下载归档包,国内地址:https://dl.gocn.io/

1
2
3
wget https://dl.gocn.io/golang/1.9.2/go1.9.2.linux-amd64.tar.gz
tar xf go1.9.2.linux-amd64.tar.gz -C /usr/local
cd /usr/local/go
1
2
[root@localhost go]# bin/go version
go version go1.9.2 linux/amd64

配置环境变量

有4个环境变量需要设置:GOROOT、GOPATH、GOBIN、以及PATH
需要设置到某一个profile文件中(~/.bashrc, ~/.bash_profile或/etc/profile)

GOROOT

该环境变量的值应该为Go语言的当前安装目录,例如:

1
export GOROOT=/usr/local/go

GOPATH

该环境变量的值应该为Go语言的工作区的集合,例如:

1
export GOPATH=~/golib:~/goproject

GOBIN

它的值应该是你想存在Go程序的可执行文件的目录,例如:

1
export GOBIN=~/gobin

PATH

为了方便使用Go语言命令和Go程序的可执行文件,需要追加其值,如:

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

读取配置文件

1
2
3
4
export GOROOT=/usr/local/go
export GOPATH=~/golib:~/goproject
export GOBIN=~/gobin
export PATH=$PATH:$GOROOT/bin/:$GOBIN
1
source ~/.bashrc

验证配置结果

1
2
3
[root@localhost ~]# source ~/.bashrc
[root@localhost ~]# go version
go version go1.9.2 linux/amd64

使用

常用命令介绍

go run

1
2
3
4
5
6
7
8
9
go run # 用于运行命令源码文件
-a: 强制编译相关代码,不论它们的编译结果是否已是最新的
-n: 打印编译过程中所需运行的命令,但不真正执行它们
-p n: 并行编译,其中n为并行的数量
-v: 列出被编译的代码包的名称
-a -v: 列出所有被编译的代码包的名称
-work: 显示编译时创建的临时工作目录的路径,并且不删除它
-x: 打印编译过程中所需运行的命令
-x: 打印编译过程中所需运行的命令

-p n: n建议设置为当前计算机逻辑CPU个数,如4核8线程则n为8

-a -v:

  • 1.3中的所有:包含Go语言自带的标准库的代码包
  • 1.3中的所有:不包含Go语言自带的标准库的代码包

go build

1
go build # 用于编译源码文件或代码包
  • 编译非命令源码文件不会产生任何结果文件
  • 编译命令源码文件会在该命令的执行目录中生成一个可执行文件
  • 执行该命令且不加任何参数时,它会试图把当前目录作为代码包并编译
  • 执行该命令且以代码包的导入路径作为参数时,该代码包及其依赖会被编译
  • 加入-a标记后所有涉及到的代码包都会被重新编译
  • 不加入-a标记,则只会编译归档文件不是最新的代码包
  • 执行该命令且以若干源码文件作为参数时,只有这些文件会被编译

go install

1
go install # 用于编译并安装代码包或源码文件
  • 安装代码包会在当前工作区的pkg/<平台相关目录>下生成归档文件
  • 安装命令源码文件会在当前工作区的bin目录或$GOBIN目录下生成可执行文件
  • 执行该命令且不追加任何参数时,它会试图把当前目录作为代码包并安装
  • 执行该命令且以代码包的导入路径作为参数时,该代码包及其依赖会被安装
  • 执行该命令且以命令源码文件及其相关库源码文件作为参数时,只有这些文件会被编译并安装

go get

1
2
3
4
go get # 用于从远程代码仓库(如Github)上下载并安装代码包
-d: 只执行下载动作,而不执行安装动作
-fix: 在下载代码包后先执行修正动作,而后再进行编译和安装
-u: 利用网络来更新已有的代码包及其依赖包

受支持的代码版本控制系统有:Git、Mercurial(hg)、SVN、Bazzar
指定的代码包会被下载到$GOPATH中包含的到一个工作区的src目录中

使用实例

1
vim go1.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main

import(
"fmt"
)

func main() {
// 声明数组
cities := [...]string{"Shanghai", "Guangzhou", "Shenzhen", "Beijing"}
fmt.Printf("%-8T %2d %q\n", cities, len(cities), cities)
// 声明切片
s := []string{"A", "B", "C", "D", "E", "F", "G"}
t := s[:5]
u := s[3:len(s)-1]
fmt.Println(s, t, u)
u[1] = "x"
fmt.Println(s, t, u)
// 遍历切片
for i, letter := range s {
fmt.Println(i, letter)
}
}
1
2
3
4
5
6
7
8
9
10
11
[root@localhost go]# go run go1.go
[4]string 4 ["Shanghai" "Guangzhou" "Shenzhen" "Beijing"]
[A B C D E F G] [A B C D E] [D E F]
[A B C D x F G] [A B C D x] [D x F]
0 A
1 B
2 C
3 D
4 x
5 F
6 G

vim-go插件

vim版本需要7.4.1689以上。

1
2
3
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
git clone https://github.com/fatih/vim-go.git ~/.vim/plugged/vim-go
vim ~/.vimrc

添加

1
2
3
4
" go-vim配置
call plug#begin()
Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' }
call plug#end()

在vim中输入:PlugInstall,

安装完成

常用网站

官网: https://www.golang.org/
中文社区: https://studygolang.com/
golang中国: https://www.golangtc.com/
golang123: https://www.golang123.com/
gocn: https://gocn.io/
下载: https://dl.gocn.io/