Go,全稱golang,是Google開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型并具有垃圾回收功能的編程語言。 Go從2007年末由Robert Griesemer、Rob Pike、Ken Thompson(C語言發(fā)明者)主持開發(fā),于2009年11月正式宣布成為開放源代碼項(xiàng)目,并在Linux及Mac OS X平臺上進(jìn)行了實(shí)現(xiàn),后續(xù)增加了Windows平臺的實(shí)現(xiàn)。2012年初,Go語言官方發(fā)布了Go 1.0穩(wěn)定版本,目前Go語言基于1.x每半年發(fā)布一個版本。
創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、白銀網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為白銀等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
Go語言優(yōu)點(diǎn)如下:
A、可直接編譯成機(jī)器碼
B、豐富的標(biāo)準(zhǔn)庫支持
C、內(nèi)置強(qiáng)大的工具
D、支持跨平臺編譯
E、支持自動垃圾回收
F、更豐富的內(nèi)置類型支持
G、支持函數(shù)多返回值
H、錯誤處理支持
I、支持匿名函數(shù)和閉包
J、支持類型和接口
L、支持并發(fā)編程
M、支持反射
N、支持與C語言交互
Go語言缺點(diǎn)如下:
A、缺少框架
B、軟件包管理不完善
Go語言主要用途如下:
A、服務(wù)器編程,如處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)等
B、分布式系統(tǒng),數(shù)據(jù)庫代理器等
C、網(wǎng)絡(luò)編程,如Web應(yīng)用、API應(yīng)用、下載應(yīng)用
D、內(nèi)存數(shù)據(jù)庫,如groupcache、couchbase的部分組建
E、云平臺,目前國外很多云平臺在采用Go開發(fā),CloudFoundy的部分組建,前VMare的技術(shù)總監(jiān)自己出來搞的apcera云平臺。
Go語言支持以下系統(tǒng):
A、Linux
B、FreeBSD
C、Mac OS X(Darwin)
D、Windows
Go語言環(huán)境安裝包下載地址:
https://golang.org/dl/
https://golang.google.cn/dl/
根據(jù)操作系統(tǒng)平臺下載相應(yīng)的Go語言環(huán)境安裝包。
將下載的源碼包解壓至/usr/local目錄sudo tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz
將 /usr/local/go/bin目錄添加至PATH環(huán)境變量
export PATH=$PATH:/usr/local/go/bin
MAC平臺可以使用.pkg結(jié)尾的安裝包直接雙擊來完成安裝,安裝目錄在 /usr/local/go/下。brew install go
Windows平臺可以使用.msi 后綴的安裝包來安裝。
默認(rèn)情況下.msi文件會安裝在c:\Go目錄下,可以將 c:\Go\bin目錄添加到PATH環(huán)境變量中。添加后需要重啟命令窗口才能生效。
Go語言自帶有一套完整的命令操作工具,可以通過在命令行中執(zhí)行g(shù)o或go help來查看:
go build命令主要用于測試編譯。在包的編譯過程中,若有必要,會同時編譯與依賴包。
如果是普通包,執(zhí)行g(shù)o build命令后不會產(chǎn)生任何文件。
如果是main包,執(zhí)行g(shù)o build命令后,會在當(dāng)前目錄下生成一個可執(zhí)行文件。如果需要在$GOPATH/bin木下生成相應(yīng)的exe文件,需要執(zhí)行g(shù)o install 或者使用 go build -o 路徑/a.exe。
如果某個文件夾下有多個文件,而只想編譯其中某一個文件,可以在go build之后加上文件名,例如go build a.go。go build命令默認(rèn)會編譯當(dāng)前目錄下的所有g(shù)o文件。
可以指定編譯輸出的文件名。比如,可以指定go build -o myapp,默認(rèn)情況是package名(非main包),或者是第一個源文件的文件名(main包)。
go build會忽略目錄下以"_"或者”."開頭的go文件。
如果源代碼針對不同的操作系統(tǒng)需要不同的處理,那么可以根據(jù)不同的操作系統(tǒng)后綴來命名文件。例如有一個讀取數(shù)組的程序,對于不同的操作系統(tǒng)可能有如下幾個源文件:
array_linux.go
array_darwin.go
array_windows.go
array_freebsd.go
go build時會選擇性地編譯以系統(tǒng)名結(jié)尾的文件(Linux、Darwin、Windows、Freebsd)。Linux系統(tǒng)下面編譯只會選擇array_linux.go文件,其它系統(tǒng)命名后綴文件全部忽略。
如果直接使用,表示試圖編譯當(dāng)前目錄所對應(yīng)的代碼包,如果當(dāng)前目錄不是一個有效的代碼包(包含在 $GOPATH/src 目錄下)則會報(bào)錯;如果帶上代碼包名,則表示編譯指定的代碼包;如果帶上源碼文件,則表示編譯指定源碼文件。
GO語言的源碼文件分為三類,包括命令源碼文件、庫源碼文件和測試源碼文件。如果編譯的是命令源碼文件,或包含命令源碼文件的包(main包)時,編譯通過后會生成可執(zhí)行文件;反之則不會生成任何文件,只是做檢查性編譯。
可以在執(zhí)行g(shù)o build命令時,加上一些標(biāo)記,如:
-v 標(biāo)記,可以把命令執(zhí)行過程中構(gòu)建的包名(包含編譯過程中依賴的包)打印出來,如果 go build 的是一個源碼文件,則會打印出的包名為?command-line-arguments,這是編譯源碼文件時生成的虛擬包名,所以看到不用覺得奇怪。
-x 標(biāo)記,可以打印編譯期間所用到的所有shell命令。
-o 標(biāo)記,用來指定生成文件的路徑和名稱。
-a 標(biāo)記,強(qiáng)制重新編譯。
-buildmode=shared標(biāo)記,指定當(dāng)前編譯生成的結(jié)果類型,如靜態(tài)庫和動態(tài)庫。GO語言默認(rèn)使用靜態(tài)編譯,好處是部署時非常簡單,但使用動態(tài)庫,可以減少分發(fā)包的大小。目前在windows下尚不支持編譯成動態(tài)庫。
如果是直接使用,表示試圖編譯當(dāng)前目錄所對應(yīng)的代碼包,如果當(dāng)前目錄不是一個有效的代碼包(包含在 $GOPATH/src 目錄下)則會報(bào)錯;如果帶上代碼包名,則表示編譯指定的代碼包;如果帶上源碼文件,則表示編譯指定源碼文件。
go clean命令用來移除當(dāng)前源碼包里面編譯生成的文件,包括:
_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 產(chǎn)生
DIR.test(.exe) 由 go test -c 產(chǎn)生
MAINFILE(.exe) 由 go build MAINFILE.go產(chǎn)生
go fmt命令主要用來格式化代碼文件。
開發(fā)工具一般都帶有保存時自動格式化功能,底層其實(shí)就是調(diào)用了go fmt 命令。
gofmt -w src,可以格式化整個項(xiàng)目。
go get命令主要用來動態(tài)獲取遠(yuǎn)程代碼包,目前支持BitBucket、GitHub、Google Code和Launchpad。go get命令在內(nèi)部分成兩步操作:第一步是下載源碼包,第二步是執(zhí)行g(shù)o install。下載源碼包的go工具會自動根據(jù)不同的域名調(diào)用不同的源碼工具,對應(yīng)關(guān)系如下:
BitBucket (Mercurial Git)
GitHub (Git)
Google Code Project Hosting (Git, Mercurial, Subversion)
Launchpad (Bazaar)
為了go get能正常工作,必須確保安裝合適的源碼管理工具,并同時把源碼管理工具命令加入到PATH中。
go get 命令本質(zhì)上是首先通過源碼工具clone代碼到src目錄,然后執(zhí)行g(shù)o install。
go install命令在內(nèi)部分成兩步操作:第一步是生成結(jié)果文件(可執(zhí)行文件或者.a包),第二步會把編譯好的結(jié)果移到?$GOPATH/pkg 或者$GOPATH/bin。
.exe文件: 一般是go install帶main函數(shù)的go文件產(chǎn)生的,有函數(shù)入口,所有可以直接運(yùn)行。
.a應(yīng)用包: 一般是 go install不包含main函數(shù)的go文件產(chǎn)生的,沒有函數(shù)入口,只能被調(diào)用。
go test命令會自動讀取源碼目錄下面名為*_test.go
的文件,生成并運(yùn)行測試用的可執(zhí)行文件。
默認(rèn)不需要任何參數(shù),go test命令會自動把源碼包里所有test文件測試完畢,幫助信息可以使用go help testflag查看。
進(jìn)行單元測試的工具,單元測試代碼建議與被測試代碼放在同一個代碼包中,并以 "_test.go" 為后綴,測試函數(shù)建議以"Test"為名稱前綴。go test命令可以對代碼包進(jìn)行測試,也可以指定某個測試代碼文件運(yùn)行(要一并帶上被測試代碼文件)
go doc命令是一個很強(qiáng)大的文檔工具,用于查看文檔,如查看builti包執(zhí)行g(shù)o doc builtin,查看http包執(zhí)行g(shù)o doc net/http。查看某一個包里的函數(shù),執(zhí)行g(shù)o doc fmt Printf,也可以查看函數(shù)相應(yīng)的代碼,執(zhí)行g(shù)o doc -src fmt Printf。
通過命令在命令行執(zhí)行g(shù)odoc -http=:端口號,比如godoc -http=:8080。然后在瀏覽器中打開127.0.0.1:8080,會看到一個golang.org的本地copy版本,通過網(wǎng)頁可以查詢pk文檔等其它內(nèi)容。如果設(shè)置了GOPATH,pkg分類下會列出標(biāo)準(zhǔn)包的文檔,本地GOPATH中所有項(xiàng)目的相關(guān)文檔。
go fix用來修復(fù)老版本的代碼到新版本,例如go1前老版本的代碼轉(zhuǎn)化到go1。
go version命令用于查看go當(dāng)前的版本。
go env命令用于查看當(dāng)前go的環(huán)境變量,用于打印GO語言的環(huán)境信息,如GOPATH是工作區(qū)目錄,GOROOT是GO語言安裝目錄,GOBIN是通過go install命令生成可執(zhí)行文件的存放目錄(默認(rèn)是當(dāng)前工作區(qū)的bin目錄下),GOEXE為生成可執(zhí)行文件的后綴。
go list命令用于列出當(dāng)前全部安裝的package。
go run命令用于編譯并運(yùn)行Go程序,只能作用于命令源碼文件,一般用于開發(fā)中快速測試。
go tool命令工具,go tool pprof性能檢查工具,? ?go tool cgo跟C語言和GO語言有關(guān)的命令。
go vet是靜態(tài)檢查工具,用于一般項(xiàng)目快完成時進(jìn)行進(jìn)行優(yōu)化。
go bug命令用于GO語言調(diào)試。
通過掃描Go源碼中的特殊注釋來識別要運(yùn)行的常規(guī)命令。go generate不是go build的一部分,go generate不包含依賴關(guān)系分析,必須在運(yùn)行g(shù)o build前顯式運(yùn)行。go generate由Go package的作者使用,而不是其客戶端。
go help xx命令用于查看幫助信息,如go help bug用于查看go bug的幫助信息。
LiteIDE是一款開源、跨平臺的輕量級Go語言集成開發(fā)環(huán)境(IDE)。
下載地址 :http://sourceforge.net/projects/liteide/files/
源碼地址 :https://github.com/visualfc/liteide
Goland是由捷克JetBrains公司旨在為go開發(fā)者提供的一個符合人體工程學(xué)的新的商業(yè)IDE。Goland整合了IntelliJ平臺的有關(guān)go語言的編碼輔助功能和工具集成特點(diǎn),特點(diǎn)如下:
A、編碼輔助功能
Goland會分析開發(fā)者代碼,在符號之間尋找連接。提供代碼提示,快速導(dǎo)航,靈活的錯誤分析能力以及格式化和重構(gòu)功能。
B、符合人體工程學(xué)的設(shè)計(jì)
強(qiáng)大的靜態(tài)代碼分析能力和符合人體工程學(xué)的設(shè)計(jì),使開發(fā)者不僅僅是在工作,更是一種愉快的編程體驗(yàn)。
C、工具的集成
關(guān)鍵任務(wù)工具,例如代碼覆蓋工具,功能齊全的調(diào)試器和版本控制都集成在一起,而不會有一些隨意安裝的插件。
D、IntelliJ插件生態(tài)系統(tǒng)
除了豐富的內(nèi)置工具,如果需要任何東西,在IntelliJ插件生態(tài)系統(tǒng)中都可以找到。
官方網(wǎng)址:https://www.jetbrains.com/go/
Goland安裝完后需要對Go開發(fā)環(huán)境進(jìn)行配置。
點(diǎn)擊Configure->Settings菜單,配置如下:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")}
go run helloworld.go
打印出:Hello, World!