實驗環境
centos7.5
go1.11.5
安裝
yum install -y go
環境變量
- GOROOT:Go安裝目錄;
- GOPATH:工作目錄,其下包含src、pkg和 bin,分別用來存放源碼文件、編譯過程中的中間文件、編譯后生成的可執行文件;
1,查看Go環境變量配置;
[root@ ~ ] # go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/root/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/lib/golang"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
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-build037505318=/tmp/go-build -gno-record-gcc-switches"
2,包搜索路徑
Go在引用其他包時,搜索路徑的先后順序如下(只要搜索到,后面的不再搜索):
- 搜索當前目錄下的vender目錄;
- 搜索上一級目錄下的vender目錄,直到$GOPATH/src目錄;
- 搜索$GOPATH/src目錄;
- 搜索$GOROOT/src目錄;
看一個編譯時找不到包的具體問題,能明顯的看出其包搜索順序:
[root@VM /data/goroot/src/github.com/elastic/beats/heartbeat]# make
go build -i -ldflags "-X github.com/elastic/beats/libbeat/version.buildTime=......."
../libbeat/dashboards/importer.go:21:2: cannot find package "archive/zip" in any of:
/data/goroot/src/github.com/elastic/beats/vendor/archive/zip (vendor tree)
/data/goroot/src/archive/zip (from $GOROOT)
/root/go/src/archive/zip (from $GOPATH)
3,配置GOPATH
一般在實際使用開發項目時,我們一個會創建一個個人的Go項目路徑來存放項目代碼,把個人項目路徑添加到GOPATH:
export GOPATH=$GOPATH:/data/goroot
上述命令只能保證回話中生效,為了永久保存,可以在/etc/profile文件修改。
helloworld 第一個Go程序
編寫源碼helloworld.go(常用的Go語言開發工具:Jetbrains goland):
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World!")
}
編譯helloworld:
[root@ ~ ] # go build helloworld.go
[root@ ~ ] # ls
helloworld helloworld.go
運行helloworld:
[root@ ~ ] # ./helloworld
Hello World!
常見的Go目錄結構
WorkSpace // WorkSpace為GOPATH目錄
-- bin
-- App1 // 編譯生成
-- App2 // 編譯生成
-- pkg
-- src
-- common 1
-- common 2
-- utils ...
-- App1 // project1
-- models
-- controllers
-- others
-- main.go
-- App2 // project2
-- models
-- controllers
-- others
-- main.go
如發現文中有錯誤,望留言指明,萬分感激;
如對此文章內容感興趣,想進一步探討,可以留言交流;
如想轉發此文章,請留言協商一下,切勿不指明出處的轉發,尊重原創;
如閱讀過程中有收獲,并想感謝一下,歡迎打賞;
----小林幫