Go,全稱golang,是Google開發的一種靜態強類型、編譯型、併發型並具備垃圾回收功能的編程語言。 Go從2007年底由Robert Griesemer、Rob Pike、Ken Thompson(C語言發明者)主持開發,於2009年11月正式宣佈成爲開放源代碼項目,並在Linux及Mac OS X平臺上進行了實現,後續增長了Windows平臺的實現。2012年初,Go語言官方發佈了Go 1.0穩定版本,目前Go語言基於1.x每半年發佈一個版本。linux
Go語言優勢以下:
A、可直接編譯成機器碼
B、豐富的標準庫支持
C、內置強大的工具
D、支持跨平臺編譯
E、支持自動垃圾回收
F、更豐富的內置類型支持
G、支持函數多返回值
H、錯誤處理支持
I、支持匿名函數和閉包
J、支持類型和接口
L、支持併發編程
M、支持反射
N、支持與C語言交互git
Go語言缺點以下:
A、缺乏框架
B、軟件包管理不完善github
Go語言主要用途以下:
A、服務器編程,如處理日誌、數據打包、虛擬機處理、文件系統等
B、分佈式系統,數據庫代理器等
C、網絡編程,如Web應用、API應用、下載應用
D、內存數據庫,如groupcache、couchbase的部分組建
E、雲平臺,目前國外不少雲平臺在採用Go開發,CloudFoundy的部分組建,前VMare的技術總監本身出來搞的apcera雲平臺。golang
Go語言支持如下系統:
A、Linux
B、FreeBSD
C、Mac OS X(Darwin)
D、Windows
Go語言環境安裝包下載地址:
https://golang.org/dl/
https://golang.google.cn/dl/
根據操做系統平臺下載相應的Go語言環境安裝包。shell
將下載的源碼包解壓至/usr/local目錄sudo tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz
將 /usr/local/go/bin目錄添加至PATH環境變量
export PATH=$PATH:/usr/local/go/bin數據庫
MAC平臺可使用.pkg結尾的安裝包直接雙擊來完成安裝,安裝目錄在 /usr/local/go/下。brew install go
編程
Windows平臺可使用.msi 後綴的安裝包來安裝。
默認狀況下.msi文件會安裝在c:\Go目錄下,能夠將 c:\Go\bin目錄添加到PATH環境變量中。添加後須要重啓命令窗口才能生效。windows
Go語言自帶有一套完整的命令操做工具,能夠經過在命令行中執行go或go help來查看:數組
go build命令主要用於測試編譯。在包的編譯過程當中,如有必要,會同時編譯與依賴包。
若是是普通包,執行go build命令後不會產生任何文件。
若是是main包,執行go build命令後,會在當前目錄下生成一個可執行文件。若是須要在$GOPATH/bin木下生成相應的exe文件,須要執行go install 或者使用 go build -o 路徑/a.exe。
若是某個文件夾下有多個文件,而只想編譯其中某一個文件,能夠在go build以後加上文件名,例如go build a.go。go build命令默認會編譯當前目錄下的全部go文件。
能夠指定編譯輸出的文件名。好比,能夠指定go build -o myapp,默認狀況是package名(非main包),或者是第一個源文件的文件名(main包)。
go build會忽略目錄下以"_"或者」."開頭的go文件。
若是源代碼針對不一樣的操做系統須要不一樣的處理,那麼能夠根據不一樣的操做系統後綴來命名文件。例若有一個讀取數組的程序,對於不一樣的操做系統可能有以下幾個源文件:瀏覽器
array_linux.go array_darwin.go array_windows.go array_freebsd.go
go build時會選擇性地編譯以系統名結尾的文件(Linux、Darwin、Windows、Freebsd)。Linux系統下面編譯只會選擇array_linux.go文件,其它系統命名後綴文件所有忽略。
若是直接使用,表示試圖編譯當前目錄所對應的代碼包,若是當前目錄不是一個有效的代碼包(包含在 $GOPATH/src 目錄下)則會報錯;若是帶上代碼包名,則表示編譯指定的代碼包;若是帶上源碼文件,則表示編譯指定源碼文件。
GO語言的源碼文件分爲三類,包括命令源碼文件、庫源碼文件和測試源碼文件。若是編譯的是命令源碼文件,或包含命令源碼文件的包(main包)時,編譯經過後會生成可執行文件;反之則不會生成任何文件,只是作檢查性編譯。
能夠在執行go build命令時,加上一些標記,如:
-v 標記,能夠把命令執行過程當中構建的包名(包含編譯過程當中依賴的包)打印出來,若是 go build 的是一個源碼文件,則會打印出的包名爲 command-line-arguments,這是編譯源碼文件時生成的虛擬包名,因此看到不用以爲奇怪。
-x 標記,能夠打印編譯期間所用到的全部shell命令。
-o 標記,用來指定生成文件的路徑和名稱。
-a 標記,強制從新編譯。
-buildmode=shared標記,指定當前編譯生成的結果類型,如靜態庫和動態庫。GO語言默認使用靜態編譯,好處是部署時很是簡單,但使用動態庫,能夠減小分發包的大小。目前在windows下尚不支持編譯成動態庫。
若是是直接使用,表示試圖編譯當前目錄所對應的代碼包,若是當前目錄不是一個有效的代碼包(包含在 $GOPATH/src 目錄下)則會報錯;若是帶上代碼包名,則表示編譯指定的代碼包;若是帶上源碼文件,則表示編譯指定源碼文件。
go clean命令用來移除當前源碼包裏面編譯生成的文件,包括:
_obj/ 舊的object目錄,由Makefiles遺留
_test/ 舊的test目錄,由Makefiles遺留
_testmain.go 舊的gotest文件,由Makefiles遺留
test.out 舊的test記錄,由Makefiles遺留
build.out 舊的test記錄,由Makefiles遺留
*.[568ao] object文件,由Makefiles遺留
DIR(.exe) 由 go build 產生
DIR.test(.exe) 由 go test -c 產生
MAINFILE(.exe) 由 go build MAINFILE.go產生
go fmt命令主要用來格式化代碼文件。
開發工具通常都帶有保存時自動格式化功能,底層其實就是調用了go fmt 命令。
gofmt -w src,能夠格式化整個項目。
go get命令主要用來動態獲取遠程代碼包,目前支持BitBucket、GitHub、Google Code和Launchpad。go get命令在內部分紅兩步操做:第一步是下載源碼包,第二步是執行go install。下載源碼包的go工具會自動根據不一樣的域名調用不一樣的源碼工具,對應關係以下:
BitBucket (Mercurial Git) GitHub (Git) Google Code Project Hosting (Git, Mercurial, Subversion) Launchpad (Bazaar)
爲了go get能正常工做,必須確保安裝合適的源碼管理工具,並同時把源碼管理工具命令加入到PATH中。
go get 命令本質上是首先經過源碼工具clone代碼到src目錄,而後執行go install。
go install命令在內部分紅兩步操做:第一步是生成結果文件(可執行文件或者.a包),第二步會把編譯好的結果移到 $GOPATH/pkg 或者$GOPATH/bin。
.exe文件: 通常是go install帶main函數的go文件產生的,有函數入口,全部能夠直接運行。
.a應用包: 通常是 go install不包含main函數的go文件產生的,沒有函數入口,只能被調用。
go test命令會自動讀取源碼目錄下面名爲*_test.go
的文件,生成並運行測試用的可執行文件。
默認不須要任何參數,go test命令會自動把源碼包裏全部test文件測試完畢,幫助信息可使用go help testflag查看。
進行單元測試的工具,單元測試代碼建議與被測試代碼放在同一個代碼包中,並以 "_test.go" 爲後綴,測試函數建議以"Test"爲名稱前綴。go test命令能夠對代碼包進行測試,也能夠指定某個測試代碼文件運行(要一併帶上被測試代碼文件)
go doc命令是一個很強大的文檔工具,用於查看文檔,如查看builti包執行go doc builtin,查看http包執行go doc net/http。查看某一個包裏的函數,執行go doc fmt Printf,也能夠查看函數相應的代碼,執行go doc -src fmt Printf。
經過命令在命令行執行godoc -http=:端口號,好比godoc -http=:8080。而後在瀏覽器中打開127.0.0.1:8080,會看到一個golang.org的本地copy版本,經過網頁能夠查詢pk文檔等其它內容。若是設置了GOPATH,pkg分類下會列出標準包的文檔,本地GOPATH中全部項目的相關文檔。
go fix用來修復老版本的代碼到新版本,例如go1前老版本的代碼轉化到go1。
go version命令用於查看go當前的版本。
go env命令用於查看當前go的環境變量,用於打印GO語言的環境信息,如GOPATH是工做區目錄,GOROOT是GO語言安裝目錄,GOBIN是經過go install命令生成可執行文件的存放目錄(默認是當前工做區的bin目錄下),GOEXE爲生成可執行文件的後綴。
go list命令用於列出當前所有安裝的package。
go run命令用於編譯並運行Go程序,只能做用於命令源碼文件,通常用於開發中快速測試。
go tool命令工具,go tool pprof性能檢查工具, go tool cgo跟C語言和GO語言有關的命令。
go vet是靜態檢查工具,用於通常項目快完成時進行進行優化。
go bug命令用於GO語言調試。
經過掃描Go源碼中的特殊註釋來識別要運行的常規命令。go generate不是go build的一部分,go generate不包含依賴關係分析,必須在運行go build前顯式運行。go generate由Go package的做者使用,而不是其客戶端。
go help xx命令用於查看幫助信息,如go help bug用於查看go bug的幫助信息。
LiteIDE是一款開源、跨平臺的輕量級Go語言集成開發環境(IDE)。
下載地址 :http://sourceforge.net/projects/liteide/files/
源碼地址 :https://github.com/visualfc/liteide
Goland是由捷克JetBrains公司旨在爲go開發者提供的一個符合人體工程學的新的商業IDE。Goland整合了IntelliJ平臺的有關go語言的編碼輔助功能和工具集成特色,特色以下:
A、編碼輔助功能
Goland會分析開發者代碼,在符號之間尋找鏈接。提供代碼提示,快速導航,靈活的錯誤分析能力以及格式化和重構功能。
B、符合人體工程學的設計
強大的靜態代碼分析能力和符合人體工程學的設計,使開發者不只僅是在工做,更是一種愉快的編程體驗。
C、工具的集成
關鍵任務工具,例如代碼覆蓋工具,功能齊全的調試器和版本控制都集成在一塊兒,而不會有一些隨意安裝的插件。
D、IntelliJ插件生態系統
除了豐富的內置工具,若是須要任何東西,在IntelliJ插件生態系統中均可以找到。
官方網址:https://www.jetbrains.com/go/
Goland安裝完後須要對Go開發環境進行配置。
點擊Configure->Settings菜單,配置以下:
package main import "fmt" func main() { fmt.Println("Hello, World!")}
go run helloworld.go
打印出:Hello, World!