Go語言開發(一)、Go語言簡介
一、Go語言簡介
1、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每半年發布一個版本。
2、Go語言的優點
Go語言優點如下:
A、可直接編譯成機器碼
B、豐富的標準庫支持
C、內置強大的工具
E、支持自動垃圾回收
F、更豐富的內置類型支持
G、支持函數多返回值
H、錯誤處理支持
I、支持匿名函數和閉包
J、支持類型和接口
L、支持並發編程
M、支持反射
N、支持與C語言交互
3、Go語言的缺點
Go語言缺點如下:
A、缺少框架
B、軟件包管理不完善
4、Go語言用途
Go語言主要用途如下:
A、服務器編程,如處理日誌、數據打包、虛擬機處理、文件系統等
B、分布式系統,數據庫代理器等
C、網絡編程,如Web應用、API應用、下載應用
D、內存數據庫,如groupcache、couchbase的部分組建
E、雲平臺,目前國外很多雲平臺在采用Go開發,CloudFoundy的部分組建,前VMare的技術總監自己出來搞的apcera雲平臺。
二、Go語言環境安裝
1、Go語言環境下載
Go語言支持以下系統:
A、Linux
B、FreeBSD
C、Mac OS X(Darwin)
D、Windows
Go語言環境安裝包下載地址:
https://golang.org/dl/
https://golang.google.cn/dl/
根據操作系統平臺下載相應的Go語言環境安裝包。
2、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
3、MAC平臺安裝Go語言環境
MAC平臺可以使用.pkg結尾的安裝包直接雙擊來完成安裝,安裝目錄在 /usr/local/go/下。brew install go
4、Windows平臺安裝Go語言環境
Windows平臺可以使用.msi 後綴的安裝包來安裝。
默認情況下.msi文件會安裝在c:\Go目錄下,可以將 c:\Go\bin目錄添加到PATH環境變量中。添加後需要重啟命令窗口才能生效。
三、Go命令行工具
1、Go命令簡介
Go語言自帶有一套完整的命令操作工具,可以通過在命令行中執行go或go help來查看:
2、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 目錄下)則會報錯;如果帶上代碼包名,則表示編譯指定的代碼包;如果帶上源碼文件,則表示編譯指定源碼文件。
3、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產生
4、go fmt
go fmt命令主要用來格式化代碼文件。
開發工具一般都帶有保存時自動格式化功能,底層其實就是調用了go fmt 命令。
gofmt -w src,可以格式化整個項目。
5、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。
6、go install
go install命令在內部分成兩步操作:第一步是生成結果文件(可執行文件或者.a包),第二步會把編譯好的結果移到?$GOPATH/pkg 或者$GOPATH/bin。
.exe文件: 一般是go install帶main函數的go文件產生的,有函數入口,所有可以直接運行。
.a應用包: 一般是 go install不包含main函數的go文件產生的,沒有函數入口,只能被調用。
7、go test
go test命令會自動讀取源碼目錄下面名為*_test.go的文件,生成並運行測試用的可執行文件。
默認不需要任何參數,go test命令會自動把源碼包裏所有test文件測試完畢,幫助信息可以使用go help testflag查看。
進行單元測試的工具,單元測試代碼建議與被測試代碼放在同一個代碼包中,並以 "_test.go" 為後期,測試函數建議以"Test"為名稱前綴。go test命令可以對代碼包進行測試,也可以指定某個測試代碼文件運行(要一並帶上被測試代碼文件)
8、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中所有項目的相關文檔。
9、go fix
go fix用來修復老版本的代碼到新版本,例如go1前老版本的代碼轉化到go1。
10、go version
go version命令用於查看go當前的版本。
11、go env
go env命令用於查看當前go的環境變量,用於打印GO語言的環境信息,如GOPATH是工作區目錄,GOROOT是GO語言安裝目錄,GOBIN是通過go install命令生成可執行文件的存放目錄(默認是當前工作區的bin目錄下),GOEXE為生成可執行文件的後綴。
12、go list
go list命令用於列出當前全部安裝的package。
13、go run
go run命令用於編譯並運行Go程序,只能作用於命令源碼文件,一般用於開發中快速測試。
14、go tool
go tool命令工具,go tool pprof性能檢查工具,? ?go tool cgo跟C語言和GO語言有關的命令。
15、go vet
go vet是靜態檢查工具,用於一般項目快完成時進行進行優化。
16、go bug
go bug命令用於GO語言調試。
17、go generate
通過掃描Go源碼中的特殊註釋來識別要運行的常規命令。go generate不是go build的一部分,go generate不包含依賴關系分析,必須在運行go build前顯式運行。go generate由Go package的作者使用,而不是其客戶端。
18、go help
go help xx命令用於查看幫助信息,如go help bug用於查看go bug的幫助信息。
四、Go語言開發環境
1、LiteIDE
LiteIDE是一款開源、跨平臺的輕量級Go語言集成開發環境(IDE)。
下載地址 :http://sourceforge.net/projects/liteide/files/
源碼地址 :https://github.com/visualfc/liteide
2、GoLand
Goland是由捷克JetBrains公司旨在為go開發者提供的一個符合人體工程學的新的商業IDE。Goland整合了IntelliJ平臺的有關go語言的編碼輔助功能和工具集成特點,特點如下:
A、編碼輔助功能
Goland會分析開發者代碼,在符號之間尋找連接。提供代碼提示,快速導航,靈活的錯誤分析能力以及格式化和重構功能。
B、符合人體工程學的設計
強大的靜態代碼分析能力和符合人體工程學的設計,使開發者不僅僅是在工作,更是一種愉快的編程體驗。
C、工具的集成
關鍵任務工具,例如代碼覆蓋工具,功能齊全的調試器和版本控制都集成在一起,而不會有一些隨意安裝的插件。
D、IntelliJ插件生態系統
除了豐富的內置工具,如果需要任何東西,在IntelliJ插件生態系統中都可以找到。
官方網址:https://www.jetbrains.com/go/
Goland安裝完後需要對Go開發環境進行配置。
點擊Configure->Settings菜單,配置如下:
五、Go語言示例
1、helloworld.go編寫
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")}
2、編譯執行
go run helloworld.go
打印出:Hello, World!
Go語言開發(一)、Go語言簡介