Golang基礎教程:10分鐘入門

jopen 9年前發布 | 17K 次閱讀 Go 語言 Google Go/Golang開發

 Go是你可以信任的聰明的人設計的一個可愛小巧的編程語言 ,并且由一個不斷增長的巨大開源社區進行持續的完善和提高 。

Go意味著簡單, 但有時它的約定可能有點難以理解。 我想告訴你我如何開始我的Go項目,以及如何使用Go的常規用法。 讓我們構建一個web應用程序的后端服務。

設置您的環境

當然,第一步是安裝Go。 您可以從官方網站為 您的操作系統安裝使用二進制發行版 。 如果你在Mac上使用自制程序, brew install go很起作用。 當你完成安裝,這應該工作:

$ go version
go version go 1.3.1 darwin/amd64

一旦安裝完成,唯一另外要做的是設置GOPATH。 這是根目錄,將保留你所有的Go代碼,建立artifacts。 這個Go工具將在你的 GOPATH創建三個子目錄:bin,pkg和src。 有些人把它設置成 $ HOME /go,但我更喜歡簡單的 $ HOME。確保它能導出到您的環境。如果你使用bash,下面所示的代碼應該工作:

$ echo 'export GOPATH=$HOME' >> $HOME/.profile
$ source $HOME/.profile
$ go env | grep GOPATH
GOPATH="/Users/peter"

Go有很多可用的編輯器和插件。 我個人是Sublime Text和優秀的 GoSublime插件的狂熱粉絲。 但是語言是非常簡單直白的,特別是對于一個小項目,一個純文本編輯器是綽綽有余的。 我和一群專業的,全職Go開發人員一起工作,他們仍然使用vanilla vim,甚至沒有語法高亮顯示。 要開始開發Go程序,你肯定不再需要更多的東西。 像往常一樣,簡單就是王道。

一個新項目

在運作環境中,我們將給這個項目創建一個新的目錄。Go工具鏈期望所有的源代碼存在于GOPATH / src,所以我們總是在這個路徑下工作。 工具鏈也可以直接導入和托管在GitHub或Bitbucket等網站上的項目互動,前提是假設他們放在正確的地方。

對于這個示例, 在GitHub創建一個新的空的庫。 我將假定它叫做“hello”。 然后,在$GOPATH路徑下為它創建一個主頁。

$ mkdir -p $GOPATH/src/github.com/your-username
$ cd $GOPATH/src/github.com/your-username
$ git clone git@github.com:your-username/hello
$ cd hello

太好了。 創建 main.go,這將是我們的絕對最小Go程序。

package main

func main() {
    println("hello!")
}

調用 go build編譯當前目錄下的所有文件。 它會產生一個和這個目錄名稱相同的二進制。

$ go build
$ ./hello
hello!

簡單! 即使編寫Go應用程序幾年后,我都像這樣開始我所有的新項目。 一個空的git存儲庫,a  main.go,一點點的打字。

因為我們注重遵循共同的約定,您的應用程序是可以自動的 go get. 如果你承諾,把這個單一文件放到GitHub, 任何一個安裝過Go的人應該可以這樣做:

$ go get github.com/your-username/hello
$ $GOPATH/bin/hello
hello!

創建web服務器

讓我們把我們的hello,world變成一個web服務器。 這是完整的程序。

package main

import "net/http"

func main() {
    http.HandleFunc("/", hello)
    http.ListenAndServe(":8080", nil)
}

func hello(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("hello!"))
}

有一點需要拆包。 首先,我們需要從標準庫包導入 net/http 。

import "net/http"

然后,在主函數中,我們在網絡服務器的根路徑下安裝一個處理函數。 http.HandleFunc 操作缺省HTTP路由器,一般稱為 ServeMux。

http.HandleFunc("/", hello)

函數hello,是一個 http.HandlerFunc ,這意味著它有一個特定類型簽名,并可以作為參數傳遞給HandleFunc。 每次和根路徑相匹配的一個新的請求到達HTTP服務器時,服務器將生成一個新的goroutine執行hello函數。 hello函數簡單地使用 http.ResponseWriter 寫一個響應給客戶端。 因為http.ResponseWriter.Write取用更普遍的 []byte或byte-slice作為參數,我們做一個簡單的字符串類型轉換。

func hello(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("hello!"))
}

最后,我們通過 http.ListenAndServe 用默認的ServeMux啟動HTTP服務器的8080端口。這是一個同步,或阻塞調用,這將保持這個項目一直運行直到被中斷。 編譯和運行和之前一樣。

$ go build
./hello

在另一個終端,或您的瀏覽器,創建一個HTTP請求。

$ curl http://localhost:8080
hello!

簡單! 沒有安裝框架,沒有依賴下載,沒有創建任何項目架構。甚至二進制本身是原生代碼,靜態鏈接的,沒有運行時依賴關系。 另外,標準庫的HTTP服務器是產品級的,可以防御常見的攻擊。 它可以直接為在線網絡提供服務請求。

原文地址: howistart.org

來源:ourjs

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!