Go語言開發(一)、Go語言簡介

Go語言開發(一)、Go語言簡介

1、Go語言簡介

一、Go語言簡介

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語言的優勢

Go語言優勢以下:
A、可直接編譯成機器碼
B、豐富的標準庫支持
C、內置強大的工具
D、支持跨平臺編譯
E、支持自動垃圾回收
F、更豐富的內置類型支持
G、支持函數多返回值
H、錯誤處理支持
I、支持匿名函數和閉包
J、支持類型和接口
L、支持併發編程
M、支持反射
N、支持與C語言交互git

三、Go語言的缺點

Go語言缺點以下:
A、缺乏框架
B、軟件包管理不完善github

四、Go語言用途

Go語言主要用途以下:
A、服務器編程,如處理日誌、數據打包、虛擬機處理、文件系統等
B、分佈式系統,數據庫代理器等
C、網絡編程,如Web應用、API應用、下載應用
D、內存數據庫,如groupcache、couchbase的部分組建
E、雲平臺,目前國外不少雲平臺在採用Go開發,CloudFoundy的部分組建,前VMare的技術總監本身出來搞的apcera雲平臺。golang

2、Go語言環境安裝

一、Go語言環境下載

Go語言支持如下系統:
A、Linux
B、FreeBSD
C、Mac OS X(Darwin)
D、Windows
Go語言環境安裝包下載地址:
https://golang.org/dl/
https://golang.google.cn/dl/
Go語言開發(一)、Go語言簡介
根據操做系統平臺下載相應的Go語言環境安裝包。shell

二、Linux平臺安裝Go語言環境

將下載的源碼包解壓至/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平臺安裝Go語言環境

MAC平臺可使用.pkg結尾的安裝包直接雙擊來完成安裝,安裝目錄在 /usr/local/go/下。
brew install go編程

四、Windows平臺安裝Go語言環境

Windows平臺可使用.msi 後綴的安裝包來安裝。
默認狀況下.msi文件會安裝在c:\Go目錄下,能夠將 c:\Go\bin目錄添加到PATH環境變量中。添加後須要重啓命令窗口才能生效。windows

3、Go命令行工具

一、Go命令簡介

Go語言自帶有一套完整的命令操做工具,能夠經過在命令行中執行go或go help來查看:
Go語言開發(一)、Go語言簡介數組

二、go build

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

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命令主要用來格式化代碼文件。
開發工具通常都帶有保存時自動格式化功能,底層其實就是調用了go fmt 命令。
gofmt -w src,能夠格式化整個項目。

五、go get

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

go install命令在內部分紅兩步操做:第一步是生成結果文件(可執行文件或者.a包),第二步會把編譯好的結果移到 $GOPATH/pkg 或者$GOPATH/bin。
.exe文件: 通常是go install帶main函數的go文件產生的,有函數入口,全部能夠直接運行。
.a應用包: 通常是 go install不包含main函數的go文件產生的,沒有函數入口,只能被調用。

七、go test

go test命令會自動讀取源碼目錄下面名爲*_test.go的文件,生成並運行測試用的可執行文件。
默認不須要任何參數,go test命令會自動把源碼包裏全部test文件測試完畢,幫助信息可使用go help testflag查看。
進行單元測試的工具,單元測試代碼建議與被測試代碼放在同一個代碼包中,並以 "_test.go" 爲後綴,測試函數建議以"Test"爲名稱前綴。go test命令能夠對代碼包進行測試,也能夠指定某個測試代碼文件運行(要一併帶上被測試代碼文件)

八、go doc

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

go fix用來修復老版本的代碼到新版本,例如go1前老版本的代碼轉化到go1。

十、go version

go version命令用於查看go當前的版本。

十一、go env

go env命令用於查看當前go的環境變量,用於打印GO語言的環境信息,如GOPATH是工做區目錄,GOROOT是GO語言安裝目錄,GOBIN是經過go install命令生成可執行文件的存放目錄(默認是當前工做區的bin目錄下),GOEXE爲生成可執行文件的後綴。

十二、go list

go list命令用於列出當前所有安裝的package。

1三、go run

go run命令用於編譯並運行Go程序,只能做用於命令源碼文件,通常用於開發中快速測試。

1四、go tool

go tool命令工具,go tool pprof性能檢查工具,   go tool cgo跟C語言和GO語言有關的命令。

1五、go vet

go vet是靜態檢查工具,用於通常項目快完成時進行進行優化。

1六、go bug

go bug命令用於GO語言調試。

1七、go generate

經過掃描Go源碼中的特殊註釋來識別要運行的常規命令。go generate不是go build的一部分,go generate不包含依賴關係分析,必須在運行go build前顯式運行。go generate由Go package的做者使用,而不是其客戶端。

1八、go help

go help xx命令用於查看幫助信息,如go help bug用於查看go bug的幫助信息。

4、Go語言開發環境

一、LiteIDE

LiteIDE是一款開源、跨平臺的輕量級Go語言集成開發環境(IDE)。
下載地址 :http://sourceforge.net/projects/liteide/files/
源碼地址 :https://github.com/visualfc/liteide
Go語言開發(一)、Go語言簡介

二、GoLand

Goland是由捷克JetBrains公司旨在爲go開發者提供的一個符合人體工程學的新的商業IDE。Goland整合了IntelliJ平臺的有關go語言的編碼輔助功能和工具集成特色,特色以下:
A、編碼輔助功能
Goland會分析開發者代碼,在符號之間尋找鏈接。提供代碼提示,快速導航,靈活的錯誤分析能力以及格式化和重構功能。
B、符合人體工程學的設計
強大的靜態代碼分析能力和符合人體工程學的設計,使開發者不只僅是在工做,更是一種愉快的編程體驗。
C、工具的集成
關鍵任務工具,例如代碼覆蓋工具,功能齊全的調試器和版本控制都集成在一塊兒,而不會有一些隨意安裝的插件。
D、IntelliJ插件生態系統
除了豐富的內置工具,若是須要任何東西,在IntelliJ插件生態系統中均可以找到。
官方網址:https://www.jetbrains.com/go/
Goland安裝完後須要對Go開發環境進行配置。
Go語言開發(一)、Go語言簡介
點擊Configure->Settings菜單,配置以下:
Go語言開發(一)、Go語言簡介

5、Go語言示例

一、helloworld.go編寫

package main
import "fmt"

func main() {
   fmt.Println("Hello, World!")}

二、編譯執行

go run helloworld.go打印出:Hello, World!

相關文章
相關標籤/搜索