項目地址 https://github.com/bonfy/go-mega
通常計算機書的開頭都是 Hello Worldgit
咱們亦不能免俗,因此本章咱們的任務就是完成最簡單的 Hello Worldgithub
本章的GitHub連接爲: Source, Zipgolang
與 Python 相比,Go 對代碼存放的位置仍是有講究的,畢竟這是由 Go 特殊的 package引用機制
決定的,首先創建本身存放此次代碼的文件夾web
$ cd $GOPATH/src $ mkdir -p github.com/bonfy/go-mega-code $ cd github.com/bonfy/go-mega-code
這裏若是你們有Github帳號,並且想上傳到本身的repo的話,建議 github.com/your_user_name/repo_name 的文件夾flask
在 github.com/bonfy/go-mega-code 文件夾下 創建 main.go
,這是咱們程序的主入口瀏覽器
main.go
網絡
package main import "net/http" func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello World")) }) http.ListenAndServe(":8888", nil) }
短短不到10行代碼,咱們的 Hello World 應用就已經完成了,並且不須要任何的其餘第三方Package,只須要引入官方的 net/http 就好了,就是這麼easyapp
讓咱們來運行下面的命令,看下效果函數
$ go run main.go
如今打開您的網絡瀏覽器並在地址欄中輸入如下URL:ui
http://localhost:8888 或者 http://127.0.0.1:8888
這裏對上面的代碼進行簡單的說明
這裏的 func main()
是主程序入口,主要用到了 net/http 的兩個函數
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) func ListenAndServe(addr string, handler Handler) error
HandleFunc
相似於 flask的 app.route
, pattern
提供了路由路徑,handler是一個函數參數,這裏咱們的程序中傳入的是一個匿名函數, 減小了代碼
ListenAndServe
第一個參數爲 addr,若是不提供ip,這裏只傳入端口,至關於 0.0.0.0:8888
,第二個參數 Handler 傳入 nil,則表示使用 Default 的 Server
另外 輸出 Hello World
的辦法,大體有三個,以下:
// Case 1: w.Write byte w.Write([]byte("Hello World")) // Case 2: fmt.Fprintf fmt.Fprintf(w, "Hello World") // Case 3: io.Write io.WriteString(w, "Hello World")
其中第一種用的是 ResponseWriter 的 Write([]byte) (int, error)
方法, 而 後面兩種是稍微用到了 Go 裏面interface 的特性, ResponseWriter interface 要實現 Write([]byte) (int, error)
的方法,因此也就實現了 io.Writer 方法,因此能夠做爲 io.Writer 的類型做爲 後面兩個函數的參數。
這裏若是想更深刻的瞭解 net/http 處理請求的話,能夠看下Go源碼中的 net/http/server.go
或者看下 Go的http包詳解