老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

context的上下文值如何進行傳遞

這篇文章運用簡單易懂的例子給大家介紹context的上下文值如何進行傳遞,代碼非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

目前成都創新互聯公司已為超過千家的企業提供了網站建設、域名、網頁空間、網站托管、企業網站設計、和平網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。

本文開始將針對context的用法進行系統化討論,在這里你將能夠在工作中合理使用context解決一些比較棘手的問題。

context處理超時處理之外還可以用來保存數據,當你需要在多個上下文傳遞時傳遞數據,那么本文提到的知識可以排上用場。

示例代碼

示例代碼為一個簡單的http服務,流程是登錄之后會跳轉首頁,首頁通過guard中間件進行鑒權。當然,示例代碼未做其他諸如連接數據庫之類的處理,這不是本文的重點。
守衛函數讀取cookie之后將cookie值寫入context并向下傳遞,在整個請求中可以說是“透明”的。當訪問到需要保護的接口時檢測到沒有提供cookie,則直接終端請求,否則通過r.WithContext將username的值存入cookie,避免的業務接口直接讀取cookie的弊端。因為如果后期更改鑒權算法的話,業務代碼可以不用更改,直接更改中間件即可。

package main

import (
    "context"
    "fmt"
    "log"
    "net/http"
    "time"
)

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/", guard(home))
    mux.HandleFunc("/login", login)
    log.Fatal(http.ListenAndServe(":8080", mux))
}

// 登錄
func login(w http.ResponseWriter, r *http.Request) {
    if r.URL.Query().Get("username") != "root" {
        http.Error(w, http.StatusText(401), 401)
        return
    }
    cookie := &http.Cookie{Name: "username", Value: "root", Expires: time.Now().Add(time.Hour)}
    http.SetCookie(w, cookie)
    http.Redirect(w, r, "/", 302)
}

func home(w http.ResponseWriter, r *http.Request) {
    username := r.Context().Value("username")
    fmt.Fprintf(w, "welcome login: %s", username.(string))
}

// 守衛
func guard(handleFunc http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // check username
        log.Printf("%s - %s\n", r.Method, r.RequestURI)
        cookie, err := r.Cookie("username")
        if err != nil || cookie == nil { // 如果username為空直接攔截
            http.Error(w, http.StatusText(401), 401)
            return
        }
        handleFunc(w, r.WithContext(context.WithValue(r.Context(), "username", cookie.Value)))
    }
}

關于context的上下文值如何進行傳遞就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


標題名稱:context的上下文值如何進行傳遞
網站網址:http://www.xueling.net.cn/article/jciosi.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 久久精品国产第一区二区三区 | 米奇777第4色狠狠 | 女人被做到高潮视频 | 免费无码一级成年片在线观看 | 国产亚洲免费在线观看 | 免费在线观看av的网站 | 日b视频在线| av无码一区二区三区午夜 | 免费在线观看一区 | gogogo高清在线播放免费观看免费 | 国产亚洲av片在线观看18女人 | 国产一级毛片在线 | av在线播放一区 | 福利免费观看体检区 | 日本高清视频一区二区 | 国产免费拔擦拔擦8x高清在线人 | 国产资源在线观看视频 | 国产特黄色片 | 一级片aaaa | 亚洲愉拍自拍欧美精品 | 国产极品粉嫩福利在线观看 | 在线观看亚洲AV日韩A∨ | 美女粉嫩极品国产在线2020 | 日本高清免费aaaaa大片视频 | 99久久国产综合精品女不卡 | 成人亚洲欧美久久久久 | 91在线官网| 一级做a爱片特黄在线观看 国产9页 | 日韩视频一区在线观看 | 欧美熟妇vdeos中国版 | 97超碰caoporen公开人人爽 | 第九色区AV天堂 | 91麻豆精品国产综合久久久久久 | 人妻中文字幕乱人伦在线 | 波多野结衣AV一区二区无码 | 邻居丰满的奶水在线hd | 亚洲性夜夜时 | 久久精品国产99久久久香蕉 | 欧美日国产 | 欧美视频不卡 | 国产精品自拍一区 |