在Web的世界裡常見的通訊協定就兩種
而WebSocket在本次的範例中不會用到
在我們瀏覽器的操控下,其實我們打的網址按下Enter後
他做的就是打需求(Request)到伺服器(Server)取網頁資料回來
瀏覽器針對取的資料格式不同進行不同的呈現方式
例如:
瀏覽器上輸入http://www.google.com
按下Enter
瀏覽器就會透過HttpMethod的Get取回HTML並顯示在畫面上
回歸正題 在Go裡面已有人寫好HttpServer的套件
這裡就使用Go最常見的 gorilla/mux 來使用他是基於原生'net/http'的擴充套件
輸入以下指令安裝套件(建議使用Go Mod 可參考 第七天的補充說明)
go get -u github.com/gorilla/mux
建立一個Router.go的檔案負責管理所有Controller進來的路由
type Route struct {
Method string
Pattern string
Handler http.HandlerFunc
Middleware mux.MiddlewareFunc
}
func register(method, pattern string, handler http.HandlerFunc, middleware mux.MiddlewareFunc) {
routes = append(routes, Route{method, pattern, handler, middleware})
}
func NewRouter() http.Handler {
r := mux.NewRouter()
for _, route := range routes {
r.Methods(route.Method).
Path(route.Pattern).
Handler(route.Handler)
if route.Middleware != nil {
r.Use(route.Middleware)
}
}
handler := cors.Default().Handler(r)
return handler
}
func init() {
fmt.Println("Route Init")
register("GET", "/api", Hello, nil)
fmt.Printf("%+v", routes)
}
func Hello(w http.ResponseWriter, r *http.Request) {
fmt.Printf("Hello World")
fmt.Fprintf(w, "Hello World")
}
這裡的mygo是當初在New Mod時所用的名稱
package main
import (
"fmt"
"net/http"
Router "mygo/router"
)
func main() {
fmt.Println("Start")
r := Router.NewRouter()
http.ListenAndServe(":3001", r)
}