-
windows下 golang 安裝與配置
請(qǐng)參照:http://www.lxweimin.com/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í)可能還是無(wú)法使用 命令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
用戶(hù)家目錄下的私有環(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ù)帳號(hào)讀取
~/.bashrc
?
~/.profile
與~/.bashrc
的區(qū)別
~/.profile
可以設(shè)定本用戶(hù)專(zhuān)有的路徑,環(huán)境變量,等,它只能登入的時(shí)候執(zhí)行一次
~/.bashrc
也是某用戶(hù)專(zhuān)有設(shè)定文檔,可以設(shè)定路徑,命令別名,每次shell script的執(zhí)行都會(huì)使用它一次 - 首先讀入的是全局環(huán)境變量設(shè)定檔
-
配置 GOPATH (可選)
- 在
~/.bashrc
或者~/.profile
最后一行加上export GOPATH=$HOME<你的工作目錄>
- 進(jìn)入bash 執(zhí)行
source ~/.bashrc
或者~/.profile
,如果此時(shí)沒(méi)有生效,可嘗試重啟或者注銷(xiāo)重新登錄
- 在
-
-
直接一鍵安裝,但是版本不一定是最新的
安裝命令:
sudo apt install golang-go
也可以在安裝之前通過(guò)
apt-cache search golang-go
搜索可見(jiàn) golang-go 版本等- PATH 和 GOPATH 等見(jiàn)上文環(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
,類(lèi)似于JAVA中的JAVA_HOME -
GOPATH
GOPATH 表示代碼包或項(xiàng)目所在的地址,可以設(shè)置多個(gè),不同地址之間使用
:
分隔假設(shè):
GOPATH=~/project1:~/project2,GOROOT=/usr/local/go
,在代碼中引用了包:github.com/bitly/nsq/util
GO程序在編譯時(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
命令的路徑,也沒(méi)有切換到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é)果,方便用戶(hù)調(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:用來(lái)移除當(dāng)前源碼包里面編譯生成的文件
- go env: 查看當(dāng)前用戶(hù)的go環(huán)境變量
- go fix: 用來(lái)修復(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_GOPATH
is a pseudo-environment-variable. It's changed to match a possible GOPATH based on:- the current working directory, e.g.
~/go/src/pkg
then$GS_GOPATH
will be~/go/
- or the path the current
.go
file (or last activated.go
file if the current file is not.go
) e.g. if your file path is/tmp/go/src/hello/main.go
then it will be/tmp/go
簡(jiǎn)單說(shuō)就是 GS_GOPATH 是用來(lái)自動(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/...
注:如果無(wú)法翻墻可能會(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
來(lái)下載,但是 crypto 官方地址在外網(wǎng)好在 golang.org 在 github.com 上有備份倉(cāng)庫(kù),所以缺少的組件可以在 github 上下載
eg: 安裝 crypto 組件
github 地址: https://github.com/golang/crypto
過(guò)程:
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.go
Browse to http://localhost:1323 and you should see Hello, World! on the page.
更多echo 請(qǐng)參照學(xué)習(xí)官方教程:https://echo.labstack.com/guide
golang 新人入門(mén)配置學(xué)習(xí)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
- 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
- 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(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)銷(xiāo)商代理我們產(chǎn)品 信息工程學(xué)院走入正規(guī)招標(biāo)流程,三家圍標(biāo),不能廢標(biāo) 新能催貨...
- 這是@草魚(yú)的第17篇原創(chuàng)文章 這是我在讀書(shū)會(huì)閱讀的第5本書(shū),很溫暖,很有愛(ài),特別推薦女生看,一定有共鳴。以下為我的...