vps的ip被封,更换ip的同时我顺带把原来的centos换成了ubuntu18,更换之后想着在服务器上重新玩一下golang,在重新安装golang的过程中我对golang的三个关键目录有了更深的理解,
我用的操作系统是Ubuntu 18.04 LTS
golang安装
1
2apt-get update
apt-get install golang在终端执行这两条命令就可以安装上golang了
go三个关键目录
go的三个关键环境变量为GOPATH、GOBIN、GOROOT
GOPATH用来指定工作空间的目录,通常会在家目录下创建一个文件夹并添加到gopath,
在设置gopath之前,先看下go env
执行命令:go env
可以看到1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24root@ubuntu:~/go/src# go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/opt/go"
GORACE=""
GOROOT="/usr/lib/go-1.10"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go-1.10/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
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 -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build634430698=/tmp/go-build -gno-record-gcc-switches"
在使用apt-get install golang后,apt-get会自动将安装包目录作为GOROOT,且GOROOT只能设置为安装包路径,这里的GOROOT为/usr/lib/go-1.10
在没有设置环境变量之前GOPATH是默认指向/opt/go的,GOBIN为空
需要注意的是不同的系统,不同的安装方式,会导致上面三个目录有所不同,至少我在mac上和ubuntu里安装后这三个路径不一样,
这个时候其实我们也可以到gopath指定的路径/opt/go下进行开发,但是我更喜欢在家目录下开发,
这里记一下这三个目录的作用
GOPATH为工作空间的路径,比如我在home目录下创建一个go文件夹来作为开发空间,那么需要在家目录下创建go文件夹1
2
3
4
5
6
7
8//cd 到家目录
cd
// 创建go文件夹
mkdir go
cd go
mkdir src
mkdir pkg
mkdir bin
编辑~/.bashrc 文件:vi ~/.bashrc
往里面追加一下内容1
export GOPATH=/root/go
GOBIN用来存放项目编译生成的可执行文件,在使用go install命令的时候会将生成的可执行二进制文本放到这个目录下,所以我们需要将之前在工作空间创建的bin路径放到GOBIN变量里
在~/.bashrc 文件中追加:1
export GOBIN=/root/go/bin
这儿如果不设置GOBIN的话,go install的时候会报错:1
go install: no install location for .go files listed on command line (GOBIN not set)
另外每次编辑~/.bashrc文件后需要soure一下
至此三个环境变量已经介绍完了,做个总结:GOPATH设置工作空间,GOROOT指向安装包目录,GOBIN指向用来存放编译生成的可执行文件的目录
小测试一下
切换到工作空间的src目录下,创建一个hello目录,并进入hello目录1
2
3cd ~/go/src
mkdir hello
cd hello
创建hello.go文件
vi hello.go
写入代码:1
2
3
4
5
6package main
import "fmt"
func main(){
fmt.Println("hello world")
}
编译文件:go build ~/go/src/hello/hello.go
如果环境变量配置正确,会在~/go/bin/目录下多出一个hello的可执行文件,.~/go/bin/hello 就会输出hello world