亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么地圖值變得不存在?

為什么地圖值變得不存在?

Go
隔江千里 2023-07-17 14:54:20
我正在使用映射將隨機字符串鍵存儲到 *os.File 對象。用戶將上傳一個文件,我想在全局地圖中保留對該文件的引用,以便稍后刪除它。我有一個 http 處理程序來處理上傳,最后,我將操作系統 uuidgen 中的隨機密鑰映射到 *os.File 類型的“logBundleFile”。var db = map[string]*os.File{}func uploadHandler(w http.ResponseWriter, r *http.Request) {    r.ParseMultipartForm(5 << 30)    file, handler, err := r.FormFile("file")    if err != nil {        log.Fatalf("Error retrieving the file: %v", err)        return    }    defer file.Close()    logBundleFile, err := ioutil.TempFile("", handler.Filename)    if err != nil {        log.Fatal(err)    }    defer logBundleFile.Close()    fileBytes, err := ioutil.ReadAll(file)    if err != nil {        log.Fatalf("Error reading file: %v", err)    }    logBundleFile.Write(fileBytes)    id, err := exec.Command("uuidgen").Output()    idStr := string(id[:])    //id := "1"    if err != nil {        log.Fatal(err)    }    db[idStr] = logBundleFile    log.Printf("ID: %v Type: %T\n", idStr, idStr)    log.Printf("val: %v Type: %T\n\n", db[idStr], db[idStr])    http.Redirect(w, r, fmt.Sprintf("/%s", idStr), http.StatusMovedPermanently)}完成后,您將被重定向到此 sessionHandler。它將檢查正文中的 ID 是否有效,即映射到 *os.File?!皁k”布爾值總是返回 false。func sessionHandler(w http.ResponseWriter, r *http.Request) {    vars := mux.Vars(r)    id := vars["id"]    log.Printf("ID: %v Type: %T\n", id, id)    log.Printf("val: %v Type: %T\n", db[id], db[id])    if val, ok := db[id]; ok {        w.Write([]byte(fmt.Sprintf("Session %s %v", id, val)))    } else {        http.Redirect(w, r, "/", http.StatusMovedPermanently)    }}這是打印的輸出。在 uploadHandler 中,我們可以看到有一個映射到非 nil *os.File 的字符串鍵。但在會話處理程序中,相同的字符串鍵映射到 nil *os.File。我不知道發生了什么事。2019/08/27 19:49:49 ID: BA06C157-451E-48B5-85F9-8069D9A4EFCE Type: string2019/08/27 19:49:49 val: &{0xc000160120} Type: *os.File2019/08/27 19:49:49 ID: BA06C157-451E-48B5-85F9-8069D9A4EFCE Type: string2019/08/27 19:49:49 val: <nil> Type: *os.File
查看完整描述

1 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

這是因為在 中uploadHandler,id變量包含換行符。如果我們仔細查看日志,我們可以看到它。不知何故,Type: string文本打印在第二行。


2019/08/27 19:49:49 ID: BA06C157-451E-48B5-85F9-8069D9A4EFCE // <-- newline

 Type: string

2019/08/27 19:49:49 ID: BA06C157-451E-48B5-85F9-8069D9A4EFCE Type: string

對 進行修剪操作idStr應該可以解決問題。


idStr := strings.TrimSpace(string(id[:]))


查看完整回答
反對 回復 2023-07-17
  • 1 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號