golang 新人入門(mén)配置學(xué)習(xí)

  1. windows下 golang 安裝與配置

    請(qǐng)參照:http://www.lxweimin.com/p/b6f34ae55c90

  2. Ubuntu下 golang 安裝與配置

    • 安裝最新版本 golang 方法 (推薦)

      1. 下載: https://www.golangtc.com/download

      2. 解壓安裝包tar -C /usr/local -xzf <安裝包> (其中 /usr/local 為 go 的解壓目錄即GOROOT,也可以安裝到自己想要的位置,后面配置一下就行了)

      3. 環(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è)定檔有三步

          1. 首先讀入的是全局環(huán)境變量設(shè)定檔 /etc/profile,然后根據(jù)其內(nèi)容讀取額外的設(shè)定的文檔
          2. 然后根據(jù)不同使用者帳號(hào),去其家目錄讀取 ~/.profile
          3. 然后在根據(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ì)使用它一次

        • 配置 GOPATH (可選)

          1. ~/.bashrc 或者 ~/.profile最后一行加上 export GOPATH=$HOME<你的工作目錄>
          2. 進(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)境配置
  3. 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
    
  4. 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)

  5. 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

      1. 編譯導(dǎo)入的包文件,所有導(dǎo)入的包文件編譯完才會(huì)編譯主程序
      2. 將編譯后生成的可執(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”等信息。

    • 其他

      1. go clean:用來(lái)移除當(dāng)前源碼包里面編譯生成的文件
      2. go env: 查看當(dāng)前用戶(hù)的go環(huán)境變量
      3. go fix: 用來(lái)修復(fù)以前老版本的代碼到新版本
      4. go list: 列出當(dāng)前全部安裝的packge
      5. 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)行成功

  6. 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 的

    • 安裝 gocode

      go get -u github.com/nsf/gocode
      go install github.com/nsf/gocode
      

      安裝完成后,我們可以在 $GOPATH/bin 目錄下,發(fā)現(xiàn)多出了個(gè) gocode 文件

  7. 常用 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

  8. 安裝 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

最后編輯于
?著作權(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ù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,155評(píng)論 3 425
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,635評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,539評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,255評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,646評(píng)論 1 326
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,838評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,399評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,146評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,338評(píng)論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,565評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,983評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,257評(píng)論 1 292
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,059評(píng)論 3 397
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,296評(píng)論 2 376

推薦閱讀更多精彩內(nèi)容