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

來源:互聯網
上載者:User

標籤:Go語言 簡介

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、內建強大的工具
D、支援跨平台編譯
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 mainimport "fmt"func main() {   fmt.Println("Hello, World!")}
2、編譯執行

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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.