-
windows下 golang 安裝與配置
請(qǐng)參照:http://www.itdecent.cn/p/b6f34ae55c90
-
Ubuntu下 golang 安裝與配置
-
安裝最新版本 golang 方法 (推薦)
解壓安裝包
tar -C /usr/local -xzf <安裝包>(其中/usr/local為 go 的解壓目錄即GOROOT,也可以安裝到自己想要的位置,后面配置一下就行了)-
環(huán)境配置
-
在 ~/.bashrc 最后一行加上
export PATH=$PATH:/usr/local/go/bin注:
:為分隔符,即配置多個(gè)路徑時(shí)使用;/usr/local/go/bin為 go 安裝位置下的 bin 目錄功效:用于 在bash 下使用命令
go等命令(可看 bin 目錄下有哪些可執(zhí)行文件) -
之后 運(yùn)行
source .bashrc更新 PATH注:如果終端為 zsh, fish 命令
source可能失效,這時(shí)需要輸入bash進(jìn)入 bash 執(zhí)行,但是當(dāng)返回zsh 或者 fish等其他終端時(shí)可能還是無法使用 命令go,這是因?yàn)槟愕?zsh 或者 fish 有自己?jiǎn)为?dú)的config 文件,你需要在那個(gè)文件最后一行加上相應(yīng)代碼(由于不同終端配置語(yǔ)法不同,此處不做擴(kuò)展)/etc/profile,/root/.bashrc是系統(tǒng)全局環(huán)境變量設(shè)定
~/.profile,~/.bashrc用戶家目錄下的私有環(huán)境變量設(shè)定?
當(dāng)?shù)侨胂到y(tǒng)時(shí)候獲得一個(gè)shell進(jìn)程時(shí),其讀取環(huán)境設(shè)定檔有三步
- 首先讀入的是全局環(huán)境變量設(shè)定檔
/etc/profile,然后根據(jù)其內(nèi)容讀取額外的設(shè)定的文檔 - 然后根據(jù)不同使用者帳號(hào),去其家目錄讀取
~/.profile - 然后在根據(jù)用戶帳號(hào)讀取
~/.bashrc
?
~/.profile與~/.bashrc的區(qū)別
~/.profile可以設(shè)定本用戶專有的路徑,環(huán)境變量,等,它只能登入的時(shí)候執(zhí)行一次
~/.bashrc也是某用戶專有設(shè)定文檔,可以設(shè)定路徑,命令別名,每次shell script的執(zhí)行都會(huì)使用它一次 - 首先讀入的是全局環(huán)境變量設(shè)定檔
-
配置 GOPATH (可選)
- 在
~/.bashrc或者~/.profile最后一行加上export GOPATH=$HOME<你的工作目錄> - 進(jìn)入bash 執(zhí)行
source ~/.bashrc或者~/.profile,如果此時(shí)沒有生效,可嘗試重啟或者注銷重新登錄
- 在
-
-
直接一鍵安裝,但是版本不一定是最新的
安裝命令:
sudo apt install golang-go也可以在安裝之前通過
apt-cache search golang-go搜索可見 golang-go 版本等- PATH 和 GOPATH 等見上文環(huán)境配置
-
-
golang 項(xiàng)目目錄結(jié)構(gòu)
一個(gè)Go項(xiàng)目在GOPATH下,會(huì)有如下三個(gè)目錄:
- src存放源代碼 ( .go )
- pkg編譯后生成的文件
- bin編譯后生成的可執(zhí)行文件 ( .a )
?
<project> |--<bin> |--<pkg> |--<src> |--<a> |--<a1> |--al.go |--<a2> |--a2.go |--<b> |--b1.go |--b2.go -
PATH GOPATH等簡(jiǎn)介-
GOROOT
GO 語(yǔ)言安裝的路徑,如我的 Ubuntu 下的是
/usr/local/go,類似于JAVA中的JAVA_HOME -
GOPATH
GOPATH 表示代碼包或項(xiàng)目所在的地址,可以設(shè)置多個(gè),不同地址之間使用
:分隔假設(shè):
GOPATH=~/project1:~/project2,GOROOT=/usr/local/go,在代碼中引用了包:github.com/bitly/nsq/utilGO程序在編譯時(shí)會(huì)按先后次序到以下目錄中尋找源碼:
~/project1/github.com/bitly/nsq/util~/project2/github.com/bitly/nsq/util/usr/local/go/github.com/bitly/nsq/util -
PATH
可執(zhí)行程序的路徑,在命令行執(zhí)行命令時(shí),系統(tǒng)默認(rèn)會(huì)在PATH中指定路徑里尋找。比如linux下我們用最常用的
cd命令,執(zhí)行時(shí)我們并未指定cd命令的路徑,也沒有切換到cd所在的目錄下去執(zhí)行該命令。這就是因?yàn)?cd命令的可執(zhí)行文件所在的目錄在PATH中錄入了。go安裝后,在GOROOT/bin目錄,如 Ubuntu 的/usr/local/go/bin目錄下會(huì)有 go 、godoc、gofmt 三個(gè)可執(zhí)行命令。為了方便在編譯go項(xiàng)目時(shí)方便的使用go build、go install等命令,需要將GOROOT/bin目錄加入到系統(tǒng)的PATH路徑下。 -
GOARCH
CPU 架構(gòu),如: amd64, 386
-
GOOS
操作系統(tǒng),如:linux
-
GOBIN
工作目錄下的bin文件夾
-
GOEXE
生成的可執(zhí)行文件后綴
-
GOHOSTARCH
想要交叉編譯的CPU架構(gòu)
-
GOHOSTOS
想要交叉編譯的操作系統(tǒng)
-
-
go 基本命令介紹
Go命令一般格式:
go command [arg]其中,command是操作命令,arg是該命令的參數(shù)
常用命令介紹:
-
go get
用于動(dòng)態(tài)獲取遠(yuǎn)程代碼包,如果是從GitHub上獲取,則需要現(xiàn)安裝git,如果是從Google Code上獲取,則需要安裝hg。go get 獲取的遠(yuǎn)程代碼包將被下載到
GOPATH目錄下的src文件夾中eg: go get -u github.com/nsf/gocode -
go install
- 編譯導(dǎo)入的包文件,所有導(dǎo)入的包文件編譯完才會(huì)編譯主程序
- 將編譯后生成的可執(zhí)行文件放到bin目錄下(GOPATH/bin),編譯后的包文件放到pkg目錄下(GOPATH/pkg)
-
go run
用于編譯并直接運(yùn)行程序,它會(huì)生成一個(gè)臨時(shí)文件(但不是一個(gè)標(biāo)準(zhǔn)的可執(zhí)行文件),直接在命令行打印輸出程序執(zhí)行結(jié)果,方便用戶調(diào)試。
eg: go run main.go -
go build
用于測(cè)試編譯包,可檢查是否存在編譯錯(cuò)誤,如果被編譯的是main包,會(huì)生成可執(zhí)行文件。
#編譯 go build main.go #運(yùn)行 ./main -
go fmt
用于格式化源碼,有的IDE保存源碼時(shí)自動(dòng)執(zhí)行該命令,比如subl,也可手動(dòng)執(zhí)行它。
eg: go fmt main.go -
go test
用于運(yùn)行測(cè)試文件,該命令會(huì)自動(dòng)讀取源碼目錄下的名為:*_test.go的文件,生成并運(yùn)行測(cè)試用的可執(zhí)行文件,測(cè)試成功會(huì)顯示“PASS”、“OK”等信息。
-
其他
- go clean:用來移除當(dāng)前源碼包里面編譯生成的文件
- go env: 查看當(dāng)前用戶的go環(huán)境變量
- go fix: 用來修復(fù)以前老版本的代碼到新版本
- go list: 列出當(dāng)前全部安裝的packge
- go version: 查看當(dāng)前go版本
hello world:
main.go 代碼:
package main import ( "fmt" ) func main() { fmt.Println("Hello World!") }進(jìn)入該文件所在目錄,嘗試編譯運(yùn)行:
go run main.go終端會(huì)輸出 Hello World! ,則運(yùn)行成功
-
-
sublime 配置 golang 環(huán)境
-
安裝 GoSublime
運(yùn)行:Ctrl + B
個(gè)人 GoSublime 配置:
{ "env": { "PATH": "$PATH", // "GOPATH": "$HOME/Projects/Go/test", // "GOPATH": "$GOPATH:$GS_GOPATH", "GOPATH": "$GS_GOPATH" }, "comp_lint_enabled":true, "lint_enabled": true, "autocomplete_builtins": true, "fmt_cmd" :[ "goimports"], "snippets": [ { "match": {"global": true, "pkgname": "."}, "snippets": [ { "text":"type", "title":"type struct {}", "value":"type ${1:name} struct {\n\t$0\n}" },{ "text":"type", "title":"type interface {}", "value":"type ${1:name} interface {\n\t$0\n}" },{ "text":"var", "title":"var struct {}", "value":"var ${1:name} struct {\n\t$0\n}" },{ "text":"map", "title":"map[...]...", "value":"map[${1:string}]${2:interface{}}" },{ "text":"interface", "title":"interface{}", "value":"interface{}" },{ "text":"if", "title":"if err != nil {...}", "value":"if ${1:err} ${2:!=} ${3:nil} {\n\t$0\n}" },{ "text":"if", "title":"if ret,ok := func(); ok {...}", "value":"if ${1:ret,} ${2:ok} ${3::=} ${4:func()}; ${5:!ok} {\n\t$0\n}" },{ "text":"break", "title":"break", "value":"break" },{ "text":"continue", "title":"continue", "value":"continue" },{ "text":"defer", "title":"defer func()", "value":"defer ${0:func()}" },{ "text":"for", "title":"for k,v := range func() {...}", "value":"for ${1:k,}${2:v} := range ${3:func()} {\n\t$0\n}" },{ "text":"switch", "title":"switch ... {...}", "value":"switch ${1:name} {\ncase ${2:v}:\n\t$3\ndefault:\n\t$0\n}" } ] } ], }注:
GS_GOPATHis a pseudo-environment-variable. It's changed to match a possible GOPATH based on:- the current working directory, e.g.
~/go/src/pkgthen$GS_GOPATHwill be~/go/ - or the path the current
.gofile (or last activated.gofile if the current file is not.go) e.g. if your file path is/tmp/go/src/hello/main.gothen it will be/tmp/go
簡(jiǎn)單說就是 GS_GOPATH 是用來自動(dòng)根據(jù)當(dāng)前目錄設(shè)置 GOPATH 的
- the current working directory, e.g.
-
安裝 gocode
go get -u github.com/nsf/gocode go install github.com/nsf/gocode安裝完成后,我們可以在 $GOPATH/bin 目錄下,發(fā)現(xiàn)多出了個(gè) gocode 文件
-
-
常用 tools
-
gocode 提供代碼補(bǔ)全
go get -u github.com/nsf/gocode -
godef 代碼跳轉(zhuǎn)
go get -v code.google.com/p/rog-go/exp/cmd/godef go install -v code.google.com/p/rog-go/exp/cmd/godef gofmt 自動(dòng)代碼整理
-
golint 代碼語(yǔ)法檢查
go get github.com/golang/lint go install github.com/golang/lint -
goimports 自動(dòng)整理imports
go get golang.org/x/tools/cmd/goimports
-
-
安裝
echo安裝:
go get -u github.com/labstack/echo/...注:如果無法翻墻可能會(huì)報(bào)錯(cuò)
package golang.org/x/crypto/acme/autocert: unrecognized import path "golang.org/x/crypto/acme/autocert"解決方案:
分析錯(cuò)誤,我們?nèi)鄙賑rypto組件,需要下載,使用
go get golang.org/x/crypto/acme/autocert來下載,但是 crypto 官方地址在外網(wǎng)好在 golang.org 在 github.com 上有備份倉(cāng)庫(kù),所以缺少的組件可以在 github 上下載
eg: 安裝 crypto 組件
github 地址: https://github.com/golang/crypto
過程:
mkdir -p /usr/local/go/src/golang.org/x/ git clone git@github.com:golang/crypto.git mv crypto /usr/local/go/golang.org/x/**測(cè)試示例: **
main.go
package main import ( "net/http" "github.com/labstack/echo" ) func main() { e := echo.New() e.GET("/", func(c echo.Context) error { return c.String(http.StatusOK, "Hello, World!") }) e.Logger.Fatal(e.Start(":1323")) }啟動(dòng):
go run server.goBrowse to http://localhost:1323 and you should see Hello, World! on the page.
更多echo 請(qǐng)參照學(xué)習(xí)官方教程:https://echo.labstack.com/guide
golang 新人入門配置學(xué)習(xí)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 引言 Go 語(yǔ)言這兩年在語(yǔ)言排行榜上的上升勢(shì)頭非常猛,Go 語(yǔ)言雖然是靜態(tài)編譯型語(yǔ)言,但是它卻擁有腳本化的語(yǔ)法,支...
- Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
- 申金鑫 17101223365 轉(zhuǎn)載自公眾號(hào)flysnow_org 【嵌牛導(dǎo)讀】:本文介紹了各種系統(tǒng)下的Go語(yǔ)言環(huán)...
- 工資確認(rèn)漲,漲八百 老一輩員工離職做經(jīng)銷商代理我們產(chǎn)品 信息工程學(xué)院走入正規(guī)招標(biāo)流程,三家圍標(biāo),不能廢標(biāo) 新能催貨...
- 這是@草魚的第17篇原創(chuàng)文章 這是我在讀書會(huì)閱讀的第5本書,很溫暖,很有愛,特別推薦女生看,一定有共鳴。以下為我的...