中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Go 語(yǔ)言基礎(chǔ)教程:10分鐘入門

2018-07-20    來(lái)源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

  Go是你可以信任的聰明的人設(shè)計(jì)的一個(gè)可愛小巧的編程語(yǔ)言 ,并且由一個(gè)不斷增長(zhǎng)的巨大開源社區(qū)進(jìn)行持續(xù)的完善和提高 。

  Go意味著簡(jiǎn)單, 但有時(shí)它的約定可能有點(diǎn)難以理解。 我想告訴你我如何開始我的Go項(xiàng)目,以及如何使用Go的常規(guī)用法。 讓我們構(gòu)建一個(gè)web應(yīng)用程序的后端服務(wù)。

 設(shè)置您的環(huán)境

  當(dāng)然,第一步是安裝Go。 您可以從官方網(wǎng)站為 您的操作系統(tǒng)安裝使用二進(jìn)制發(fā)行版 。 如果你在Mac上使用自制程序, brew install go很起作用。 當(dāng)你完成安裝,這應(yīng)該工作:

$ go version
go version go 1.3.1 darwin/amd64

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

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

  Go有很多可用的編輯器和插件。 我個(gè)人是Sublime Text和優(yōu)秀的 GoSublime插件的狂熱粉絲。 但是語(yǔ)言是非常簡(jiǎn)單直白的,特別是對(duì)于一個(gè)小項(xiàng)目,一個(gè)純文本編輯器是綽綽有余的。 我和一群專業(yè)的,全職Go開發(fā)人員一起工作,他們?nèi)匀皇褂胿anilla vim,甚至沒有語(yǔ)法高亮顯示。 要開始開發(fā)Go程序,你肯定不再需要更多的東西。 像往常一樣,簡(jiǎn)單就是王道。

 一個(gè)新項(xiàng)目

  在運(yùn)作環(huán)境中,我們將給這個(gè)項(xiàng)目創(chuàng)建一個(gè)新的目錄。Go工具鏈期望所有的源代碼存在于GOPATH / src,所以我們總是在這個(gè)路徑下工作。 工具鏈也可以直接導(dǎo)入和托管在GitHub或Bitbucket等網(wǎng)站上的項(xiàng)目互動(dòng),前提是假設(shè)他們放在正確的地方。

  對(duì)于這個(gè)示例, 在GitHub創(chuàng)建一個(gè)新的空的庫(kù)。 我將假定它叫做“hello”。 然后,在$GOPATH路徑下為它創(chuàng)建一個(gè)主頁(yè)。

$ mkdir -p $GOPATH/src/github.com/your-username
$ cd $GOPATH/src/github.com/your-username
$ git clone [email protected]:your-username/hello
$ cd hello

  太好了。 創(chuàng)建 main.go,這將是我們的絕對(duì)最小Go程序。

package main

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

  調(diào)用 go build編譯當(dāng)前目錄下的所有文件。 它會(huì)產(chǎn)生一個(gè)和這個(gè)目錄名稱相同的二進(jìn)制。

$ go build
$ ./hello
hello!

  簡(jiǎn)單! 即使編寫Go應(yīng)用程序幾年后,我都像這樣開始我所有的新項(xiàng)目。 一個(gè)空的git存儲(chǔ)庫(kù),a  main.go,一點(diǎn)點(diǎn)的打字。

  因?yàn)槲覀冏⒅刈裱餐募s定,您的應(yīng)用程序是可以自動(dòng)的 go get. 如果你承諾,把這個(gè)單一文件放到GitHub, 任何一個(gè)安裝過Go的人應(yīng)該可以這樣做:

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

 創(chuàng)建web服務(wù)器

  讓我們把我們的hello,world變成一個(gè)web服務(wù)器。 這是完整的程序。

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!"))
}

  有一點(diǎn)需要拆包。 首先,我們需要從標(biāo)準(zhǔn)庫(kù)包導(dǎo)入 net/http 。

import "net/http"

  然后,在主函數(shù)中,我們?cè)诰W(wǎng)絡(luò)服務(wù)器的根路徑下安裝一個(gè)處理函數(shù)。 http.HandleFunc 操作缺省HTTP路由器,一般稱為 ServeMux。

http.HandleFunc("/", hello)

  函數(shù)hello,是一個(gè) http.HandlerFunc ,這意味著它有一個(gè)特定類型簽名,并可以作為參數(shù)傳遞給HandleFunc。 每次和根路徑相匹配的一個(gè)新的請(qǐng)求到達(dá)HTTP服務(wù)器時(shí),服務(wù)器將生成一個(gè)新的goroutine執(zhí)行hello函數(shù)。 hello函數(shù)簡(jiǎn)單地使用 http.ResponseWriter 寫一個(gè)響應(yīng)給客戶端。 因?yàn)閔ttp.ResponseWriter.Write取用更普遍的 []byte或byte-slice作為參數(shù),我們做一個(gè)簡(jiǎn)單的字符串類型轉(zhuǎn)換。

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

  最后,我們通過 http.ListenAndServe 用默認(rèn)的ServeMux啟動(dòng)HTTP服務(wù)器的8080端口。這是一個(gè)同步,或阻塞調(diào)用,這將保持這個(gè)項(xiàng)目一直運(yùn)行直到被中斷。 編譯和運(yùn)行和之前一樣。

$ go build
./hello

  在另一個(gè)終端,或您的瀏覽器,創(chuàng)建一個(gè)HTTP請(qǐng)求。

$ curl http://localhost:8080
hello!

  簡(jiǎn)單! 沒有安裝框架,沒有依賴下載,沒有創(chuàng)建任何項(xiàng)目架構(gòu)。甚至二進(jìn)制本身是原生代碼,靜態(tài)鏈接的,沒有運(yùn)行時(shí)依賴關(guān)系。 另外,標(biāo)準(zhǔn)庫(kù)的HTTP服務(wù)器是產(chǎn)品級(jí)的,可以防御常見的攻擊。 它可以直接為在線網(wǎng)絡(luò)提供服務(wù)請(qǐng)求。

  原文地址: howistart.org

標(biāo)簽: http服務(wù)器 web服務(wù)器 代碼 服務(wù)器 網(wǎng)絡(luò) 網(wǎng)絡(luò)服務(wù)器

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:當(dāng)編程語(yǔ)言都變成女孩子(一)

下一篇:到底開發(fā)者需要掌握多少門語(yǔ)言?