經過先前的單元,你應該更了解 Go 了吧!
再次提一下,Go 以其簡潔、高效、並發支持而聞名,不僅在系統程式設計領域表現出色,同時也廣泛應用在網路應用程式的開發。接下來,將介紹如何用 Go 建立你的第一個 HTTP 伺服器。我會從基本的例子開始,讓我們進入 Go Web 開發的精彩世界。
但在開始進入正題前,先看以下程式碼:
package main
import (
"fmt"
"net/http"
)
func sayHello(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, Go Server!")
}
func main() {
http.HandleFunc("/", sayHello)
http.ListenAndServe(":8080", nil)
}
使用 go build go_web.go
並開啟這個檔案;隨後,我們打開瀏覽器,並輸入 http://127.0.0.1:8080/
,會看到這個畫面:
當你看到這個畫面,那恭喜你,你已經成功地啟動你的第一支 Go Web 程式了。
我們回頭來看一下,剛剛那段程式到底做了什麼事吧!
這個套件,是組成 Web 服務中不可或缺的套件,它提供了實現網路和 HTTP 服務的功能。
import (
"fmt"
"net/http"
)
在這邊定義了一個自製的 sayHello
的函式。其中,這個函式接收了兩個參數,一個是 http.ResponseWriter
,另一個是 http.Request
。
func sayHello(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, Go Server!")
}
為 Go 的一個介面 (interface),它定義了寫入 Http Response
的方法。當 Go 處理 Http
請求時,需要向客戶端發送一些數據,而這一個步驟就是透過 http.ResponseWriter
來完成的。
此外,當我們在 VS code 按住 command
滑鼠同時點擊 ResponseWriter
,此時,會進到了一個名為 server.go
的檔案,並跳到 ResponseWriter
的 interface
:
type ResponseWriter interface {
Header() Header
Write([]byte) (int, error)
WriteHeader(statusCode int)
}
這個接口定義了三個方法:
fmt.Fprintf(w, "Hello, Go Server!")
,這個會將 Hello, Go Server
字串格式化後寫入到 HTTP Response
的主體。為 Go 的結構體,代表一個 HTTP Request
的資訊,當客戶端向伺服器發送 HTTP 請求時,伺服器端會創建一個 http.Request
實例,其中包含了這個請求的所有相關資訊。
這個結構體 (Struct) 包含了很多有用的訊息,例如:
現在,我們來看主函式:
func main() {
http.HandleFunc("/", sayHello)
http.ListenAndServe(":8080", nil)
}
這個主要去啟動一個簡單的 HTTP 伺服器,並且設定了一個函式來處理跟路徑的 HTTP 請求。
這個是用來設定一個處理 /
這個根路徑的函式,當有請求時,會呼叫這個函式。而 sayHello
這個函式就是剛剛上面解釋的處理 HTTP response 及 Request 的處理函式。
當在瀏覽器上輸入 http://127.0.0.1:8080/
,也就是這個網站的根路徑,此時,就會觸發這個路由。
簡單來說,這個程式碼會告訴伺服器,當有人訪問根路徑 (\
) 時,會呼叫 sayHello
函式來處理這個請求。
這個的作用就是啟動一個 HTTP 伺服器,並且指定伺服器的地址和處理請求的多路徑鍵 (Mux)。:8080
: 表示伺服器在本地的 8080 埠口 (port) 上運行。可以根據你的需要更改埠口號。nil
: 這表示使用預設的多路徑鍵 (Mux)。舉例來說:
func about(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "About Us Page")
}
func main() {
http.HandleFunc("/", sayHello)
http.HandleFunc("/about", about)
http.ListenAndServe(":8080", nil)
}
當使用者進到 http://127.0.0.1:8080/about
時,就可以看到 "About Us Page" 的字樣。這就是多路徑鍵的作用,使開發者可以針對不同的路徑定義不同的邏輯。
今天,成功地建立了一個簡單的 Go HTTP
伺服器,這也是你進入 Go Web 開發的第一步。我們學習了如何匯入 net/http 套件,定義處理函式,以及如何使用 http.HandleFunc 和 http.ListenAndServe 來啟動伺服器。
那們我們明天見!!