iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 10
1
Modern Web

從零開始的點餐系統,Google好棒棒系列 第 10

[Day10] 建立一個簡單的HttpServer

Http介紹

在Web的世界裡常見的通訊協定就兩種

而WebSocket在本次的範例中不會用到

在我們瀏覽器的操控下,其實我們打的網址按下Enter後
他做的就是打需求(Request)到伺服器(Server)取網頁資料回來
瀏覽器針對取的資料格式不同進行不同的呈現方式

例如:
瀏覽器上輸入http://www.google.com按下Enter
瀏覽器就會透過HttpMethod的Get取回HTML並顯示在畫面上
HttpRequest

gorilla/mux

回歸正題 在Go裡面已有人寫好HttpServer的套件
這裡就使用Go最常見的 gorilla/mux 來使用
他是基於原生'net/http'的擴充套件
輸入以下指令安裝套件(建議使用Go Mod 可參考 第七天的補充說明)

go get -u github.com/gorilla/mux

建立Router

建立一個Router.go的檔案
負責管理所有Controller進來的路由

先定義Router的Struct

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

建立New Router的Event

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
}

透過Go的init方法來註冊路由

func init() {
	fmt.Println("Route Init")
	register("GET", "/api", Hello, nil)
	fmt.Printf("%+v", routes)
}

實作Hello的行為

func Hello(w http.ResponseWriter, r *http.Request) {
	fmt.Printf("Hello World")
	fmt.Fprintf(w, "Hello World")
}

透過Main開啟HttpServer

這裡的mygo是當初在New Mod時所用的名稱

package main

import (
	"fmt"
	"net/http"

	Router "mygo/router"
)

func main() {
	fmt.Println("Start")
	r := Router.NewRouter()
	http.ListenAndServe(":3001", r)
}

Sample Code

Sample


上一篇
[Day9] If、Switch、Defer
下一篇
[Day11] 資料庫建立-使用Docker
系列文
從零開始的點餐系統,Google好棒棒30

尚未有邦友留言

立即登入留言