微信公衆號「後端進階」,專一後端技術分享:Java、Golang、WEB框架、分佈式中間件、服務治理等等。
老司機傾囊相授,帶你一路進階,來不及解釋了快上車!git
Go 語言如今是愈來愈火了,出如今各個領域中,稱它爲21世紀的 C 語言一點都不爲過,並且 Go 語言是 2009 年才發佈的新語言,能夠說它的特性是徹底基於現代計算機來設計的,尤爲它的看家本領 goroutine 協程,在高併發場景下使用簡直不要太爽,很是適合寫一些高性能中間件。github
如今互聯網發展得很快,咱們也須要在空餘時間培養第二技能,否則很快就會被互聯網的發展潮流淘汰。而做爲 Java 後端開發的我,早在 2017 年末的時候已經經過業餘時間掌握了 Go 語言,而且還手寫了一個微信支付 SDK 做爲練手的開源項目,出乎意料地廣受 GayHub 網友的歡迎,目前將近 200 star,是目前最受歡迎的 Go 語言版微信支付 SDK 之一:後端
也從側面說明了如今 Go 語言生態還不是很成熟,但這也是一種潛力,而且我相信,Go語言是將來一大熱門語言,所以 Go 語言能夠說是後端開發者最好的第二技能選擇之一。bash
它自帶的命令諸如 go run、go build、go install 等,就能夠編譯運行 Go 應用了,這在 Java 中,想要更快速方便地進行編譯,咱們還須要依賴一些第三方工具,如 maven 編譯工具,Go 的這些命令就至關於一個 maven 了,甚至比 maven 簡單多了,並且仍是原生支持,這篇文章主要是說一下 Go 的工做目錄與編譯的規則,初步體驗一下 Go 的大道至簡的魅力。微信
GOPATH 是 Go 命令依賴的一個路徑,也是 Go 項目放置的地方,在類 unix 系統下設置 GOPATH:併發
export GOPATH=/Users/zhangchenghui/.go
複製代碼
查看 Go 環境變量:app
go env
複製代碼
$GOPATH 目錄有三個約定俗成的目錄,必定要完全理解:框架
在 GOPATH 的 src 建立一個項目:maven
cd $GOPATH/src
mkdir mypakage
cd mypakage
複製代碼
新建 test.go:分佈式
// $GOPATH/src/mypakage/test.go
package mypakage
import "fmt"
func Test() {
fmt.Println("test~~~~~")
}
複製代碼
Go 語言有個約定俗成的作法就是函數首字母大寫至關於 Java 的 public 方法,小寫至關於 Java 的 private 方法。
在該項目目錄中執行 go install 或者在任意目錄下執行 go install mypakage,請注意該文件的包 package mypakage,意味着編譯後會在 pkg 目錄生成一個包。
接下來咱們就能夠引用這個包裏面的方法啦,這和 maven 的 mvn clean install 一個道理。
在 src 目錄中新建一個應用:
cd $GOPATH/src
mkdir myapp
cd myapp
複製代碼
新建 main.go:
// $GOPATH/src/myapp/main.go
package main
import (
"fmt"
"mypakage"
)
func main() {
mypakage.Test()
fmt.Println("hello, go")
}
複製代碼
接下來就是要編譯這個應用了,進入該應用目錄,執行 go install,因爲該應用直接導入的是pakage main 包,它是Go語言中惟一一個能夠編譯後直接生成可執行文件的包,所以會在 $GOPATH/bin 下生成一個可執行文件 myapp:
在任意路徑下,執行:
myapp
複製代碼
輸出以下內容:
其實在該應用目錄下也可執行 go build 命令進行編譯,會在當前目錄下生成可執行文件,而不會安裝在 bin 目錄下。
Go 語言要如何獲取遠程包呢?在 Java 開發中,咱們我能夠經過 maven 自動地從 maven 中央倉庫中下載依賴到.m2本底倉庫中,可是在 Go 開發中,咱們只須要使用 go get 指令就能夠從遠程拉取依賴包了:
go get github.com/astaxie/beego
複製代碼
這條命令就會將源碼下載到 src 目錄中,並將源碼編譯後安裝到 pkg 目錄中:
所以,go get 至關於 git clone 源碼下來,再執行 go install。
這裏特別說明一下,go 1.12 已經發布了 go modules 做爲官方的版本依賴管理工具,而我開源的微信支付 SDK 「wxpay」已經支持了該特性,後面也會單獨跟你們講解一下 go modules。
若是大家也喜歡 Go 語言,能夠給我留言,一塊兒討論學習,我會考慮在後續更新一系列關於 Go 語言的文章,與你們共同培養第二技能。