天天看點

GoWeb

  • 常見關鍵字
    • 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)
  • 處理請求
    • 擷取請求行中資訊
      • 擷取請求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)

      • PostForm字段
        • 隻支援application/x-www-form-urlencoded編碼
        • 擷取到POST請求送出的表單參數
      • FormValue和PostFormValue擷取請求參數的值
        • r.FormValue(“user”)
        • r.PostFormValue(“user”)
    • 給客戶響應
      • 設定響應頭:w.Header().Set()
      • 給浏覽器響應json格式資料

        json,_ := json.Marshal(user)

        w.Write(json)

      • 設定狀态碼(順序一緻)

        w.Header().Set(“Location”,“位址”)

        w.WriteHeader(狀态碼)

繼續閱讀