- 常見關鍵字
- Handler:處理器
- HandlerFunc:多路複用器接收使用者請求之後根據URL判斷使用哪個處理器處理請求,找到後重定向到對應處理器來處理請求
- ListenAndServe:建立路由,監聽端口
- 搭建伺服器
- 方法一
- 建立處理器函數Handler
- HandlerFunc:可以将一個帶有正确簽名的函數轉換為一個帶有方法的Handler
- 建立路由
- 方法二(自己建立處理器)
- 建立結構體MyHandler
- 建立方法ServeHTTP
- 結構體執行個體化
- Handler
- 建立路由
- 方法三(詳細配置伺服器的資訊處理請求)
- 方法二基礎上使用http.Server
- 方法四(自己建立多路複用器)
- http.NewServeMux()
- HandlerFunc
- http.List
- enAndServe(“端口”,mux)
- 方法一
- 操作資料庫
- 建立db.go檔案
package utils import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) var( Db *sql.DB err error ) func init() { Db, err = sql.Open("mysql","root:[email protected](localhost:3306)/test") if err != nil{ panic(err.Error()) } }
- 增删改查操作
- func (*DB) Exec:執行一次指令,不傳回執行結果
- func(*DB) Query:執行一次查詢,傳回多行結果(for循環結合scan)
- func(*DB) QueryRow:執行一次查詢,傳回最多一行結果(結合scan)
- 也可以選擇先進行預編譯prepare
- 單元測試
- 被測試的源檔案和測試檔案位于同一個包
- 測試檔案以test.go結尾
- 測試檔案中的測試函數為TestXxx(t *testing.T)
- 建立db.go檔案
- 處理請求
- 擷取請求行中資訊
- 擷取請求URL:r.URL.Path
- 擷取?後面内容:r.URL.RawQuery
- 擷取請求頭中資訊
- 擷取請求頭所有資訊:r.Header
- 擷取請求頭固定資訊:r.Header[] or r.Header.Get()
-
擷取請求體中資訊
//擷取請求體内容長度
len := r.ContentLength
//建立byte切片
body := make([]byte , len)
//将請求體内容讀到切片中
r.Body.Read(body)
//浏覽器顯示
fmt.Fprintln(w , string(b))
- 擷取請求參數
- Form字段(擷取URL和POST)
- Form解析好的表單資料
- Get請求為URL字段的query參數
- POST或PUT為表單參數(Body)
-
Form字段隻有在調用Request的ParseForm方法後才有效
r.ParseForm()
fmt.Fprintln(w,r.Form)
- Form解析好的表單資料
- PostForm字段
- 隻支援application/x-www-form-urlencoded編碼
- 擷取到POST請求送出的表單參數
- FormValue和PostFormValue擷取請求參數的值
- r.FormValue(“user”)
- r.PostFormValue(“user”)
- Form字段(擷取URL和POST)
- 給客戶響應
- 設定響應頭:w.Header().Set()
-
給浏覽器響應json格式資料
json,_ := json.Marshal(user)
w.Write(json)
-
設定狀态碼(順序一緻)
w.Header().Set(“Location”,“位址”)
w.WriteHeader(狀态碼)
- 擷取請求行中資訊