Go語(yǔ)言是一門(mén)全新的靜態(tài)類(lèi)型開(kāi)發(fā)語(yǔ)言,具有自動(dòng)垃圾回收,豐富的內(nèi)置類(lèi)型,函數(shù)多返回值,錯(cuò)誤處理,匿名函數(shù),并發(fā)編程,反射等特性.
go命令依賴一個(gè)重要的環(huán)境變量:$GOPATH
GOPATH允許多個(gè)目錄,當(dāng)有多個(gè)目錄時(shí),請(qǐng)注意分隔符,多個(gè)目錄的時(shí)候Windows是分號(hào);
當(dāng)有多個(gè)GOPATH時(shí)默認(rèn)將go get獲取的包存放在第一個(gè)目錄下
$GOPATH目錄約定有三個(gè)子目錄
1、src存放源代碼(比如:.go .c .h .s等) 按照golang默認(rèn)約定,go run,go install等命令的當(dāng)前工作路徑(即在此路徑下執(zhí)行上述命令)。
2、pkg編譯時(shí)生成的中間文件(比如:.a) golang編譯包時(shí)
3、bin編譯后生成的可執(zhí)行文件(為了方便,可以把此目錄加入到 $PATH 變量中,如果有多個(gè)gopath,那么使用${GOPATH//://bin:}/bin添加所有的bin目錄)
代碼目錄結(jié)構(gòu)規(guī)劃
GOPATH下的src目錄就是接下來(lái)開(kāi)發(fā)程序的主要目錄,所有的源碼都是放在這個(gè)目錄下面,那么一般我們的做法就是一個(gè)目錄一個(gè)項(xiàng)目,
例如: $GOPATH/src/mymath 表示mymath這個(gè)應(yīng)用包或者可執(zhí)行應(yīng)用,這個(gè)根據(jù)package是main還是其他來(lái)決定,main的話就是可執(zhí)行應(yīng)用,其他的話就是應(yīng)用包,這個(gè)會(huì)在后續(xù)詳細(xì)介紹package。
首先看下我的go環(huán)境:go env
C:UsersAdministrator>go env set GOARCH=amd64 set GOBIN= set GOEXE=.exe set GOHOSTARCH=amd64 set GOHOSTOS=windows set GOOS=windows set GOPATH=D:project set GORACE= set GOROOT=D:BaiduNetdiskDownloadgo set GOTOOLDIR=D:BaiduNetdiskDownloadgopkgtoolwindows_amd64 set GCCGO=gccgo set CC=gcc set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 set CXX=g++ set CGO_ENABLED=1 set CGO_CFLAGS=-g -O2 set CGO_CPPFLAGS= set CGO_CXXFLAGS=-g -O2 set CGO_FFLAGS=-g -O2 set CGO_LDFLAGS=-g -O2 set PKG_CONFIG=pkg-config
GOROOT
其實(shí)就是golang 的安裝路徑
當(dāng)你安裝好golang之后其實(shí)這個(gè)就已經(jīng)有了
GOBIN
首先看一下結(jié)構(gòu):
我們通常是在project目錄下執(zhí)行g(shù)o build,例如:
D:projectsrcgo_devday1package_examplemain>go run main.go 400 100
現(xiàn)在需要編譯main.go,golang 會(huì)自動(dòng)去src下找hello目錄,因?yàn)槲业膍ain.go中代碼的開(kāi)通導(dǎo)入了packag main包,所以可以編譯成可執(zhí)行文件,但是這樣默認(rèn)在當(dāng)前目錄下生成可執(zhí)行文件,雖然可以指定目錄,但是還是感覺(jué)不是非常方便
d:project>go build go_dev/day1/package_examplemain
所以還有兩個(gè)非常好用的命令:go get 和go install
go get
go get會(huì)做兩件事:
1、從遠(yuǎn)程下載需要用到的包
2、執(zhí)行g(shù)o install
go install
go install 會(huì)生成可執(zhí)行文件直接放到bin目錄下,當(dāng)然這是有前提的
你編譯的是可執(zhí)行文件,如果是一個(gè)普通的包,會(huì)被編譯生成到pkg目錄下該文件是.a結(jié)尾
關(guān)于go的整體一個(gè)開(kāi)發(fā)目錄
go_project // go_project為GOPATH目錄 -- bin -- myApp1 // 編譯生成 -- myApp2 // 編譯生成 -- myApp3 // 編譯生成 -- pkg -- src -- myApp1 // project1 -- models -- controllers -- others -- main.go -- myApp2 // project2 -- models -- controllers -- others -- main.go -- myApp3 // project3 -- models -- controllers -- others -- main.go
Linux下配置go環(huán)境
1、首先下載linux下的go包:https://studygolang.com/dl/golang/go1.9.2.linux-amd64.tar.gz
2、下載之后
tar -zxvf go1.9.2.linux-amd64.tar.gz 解壓源碼包
3、移動(dòng)到 /usr/local/go 也就是GOROOT
4、設(shè)置GOPATH,還有PATH環(huán)境變量
export GOROOT=/usr/local/go #設(shè)置為go安裝的路徑 export GOPATH=$HOME/gocode #默認(rèn)安裝包的路徑 export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
查看Linux go env
GOARCH="amd64" GOBIN="" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" GOPATH="/root/gocode" GORACE="" GOROOT="/usr/local/go" GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" GCCGO="gccgo" CC="gcc" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build057487015=/tmp/go-build -gno-record-gcc-switches" 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" go env