Go 語言基礎教程:10分鐘入門
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
相關文章
- go語言快速入門教程Go
- 帶你學夠浪:Go語言基礎系列 - 8分鐘學基礎語法Go
- Go 語言入門教程:變數Go變數
- Lua 語言 15 分鐘快速入門
- 帶你學夠浪:Go語言基礎系列 - 10分鐘學方法和介面Go
- C語言入門基礎C語言
- Dart語言——45分鐘快速入門(下)Dart
- Dart語言——45分鐘快速入門(上)Dart
- 基礎入門: 編寫第一個 Go 語言程式Go
- Go 語言基準測試入門Go
- Go語言基礎Go
- Dart 語言基礎入門篇Dart
- 15分鐘學會Go語言Go
- 40分鐘快速入門Dart基礎(下)Dart
- 40分鐘快速入門Dart基礎(中)Dart
- 帶你學夠浪:Go語言基礎系列 - 8分鐘學控制流語句Go
- 10分鐘go crawler colly從入門到精通Go
- 如何入門GO語言?這份GO語言超詳細入門教程你值得擁有-千鋒Go
- 零基礎看得懂的C語言入門教程C語言
- Go 語言開源 Excelize 基礎庫影片教程GoExcelize
- Go語言快速入門Go
- numpy 基礎入門 - 30分鐘學會numpy
- Go語言基礎-序言Go
- 【Go語言基礎】sliceGo
- go基礎入門Go
- 30 分鐘 Qunit 入門教程
- Maven 5 分鐘入門教程Maven
- Webpack 10分鐘入門Web
- JavaScript 10分鐘入門JavaScript
- 帶你學夠浪:Go語言基礎系列 - 8分鐘學複合型別Go型別
- 誠聘兼職GO語言零基礎入門圖書作者Go
- go語言入門教程分享:第一個程式:HelloWorldGo
- C語言指標5分鐘教程C語言指標
- C 語言指標 5 分鐘教程指標
- [翻譯] Go 語言入門Go
- ChainDesk : Go 語言入門指南AIGo
- 30 分鐘快速入門 Docker 教程Docker
- 30 分鐘 Java Lambda 入門教程Java