第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何從 Go 中的 interface{} 變量中提取字符串?

如何從 Go 中的 interface{} 變量中提取字符串?

Go
慕田峪9158850 2021-07-07 17:09:25
我是 Go 語言的新手。我正在使用 Go、Gorilla 工具包和 Mustache 模板引擎制作一個小型 Web 應用程序。到目前為止一切都很好。我使用 hoisie/mustache 和 gorilla/sessions,但我正在努力將變量從一個傳遞到另一個。我有一個傳遞給模板引擎的 map[string]interface{}。當用戶登錄時,我想獲取用戶的會話數(shù)據(jù)并將其與我的 map[string]interface{} 合并,以便數(shù)據(jù)可用于渲染。問題是 gorilla/sessions 返回一個 map[interface{}]interface{} 因此無法完成合并(以我在這種語言方面的技能)。我想過提取 interface{} 變量中的字符串(反射?)。我還考慮過讓我的會話數(shù)據(jù)成為地圖[接口{}]接口{},就像 gorilla/sessions 提供的那樣。但我是 Go 的新手,我不知道這是否可以被視為最佳實踐。作為一個 Java 人,我喜歡使用 Object 類型的變量。我想知道您認為解決此問題的最佳方法。提前致謝。
查看完整描述

1 回答

?
動漫人物

TA貢獻1815條經(jīng)驗 獲得超10個贊

您需要執(zhí)行類型斷言:特別是 Effective Go 的這一部分。


str, ok := value.(string)

if ok {

    fmt.Printf("string value is: %q\n", str)

} else {

    fmt.Printf("value is not a string\n")

}

給出您要執(zhí)行的操作的更精確示例:


if userID, ok := session.Values["userID"].(string); ok {

     // User ID is set

} else {

     // User ID is not set/wrong type; raise an error/HTTP 500/re-direct

}


type M map[string]interface{}


err := t.ExecuteTemplate(w, "user_form.tmpl", M{"current_user": userID})

if err != nil {

    // handle it

}

您所做的是確保您從 interface{} 容器中提取的用戶 ID 實際上是一個字符串。{} 如果不是,你處理它(如果你不這樣做,你會按照文檔編寫程序恐慌)。


如果是,您可以將其傳遞給您的模板,您可以在該模板中將其作為{{ .current_user }}. M是我用來避免每次調(diào)用模板渲染函數(shù)時都必須輸入 map[string]interface{} 的快捷方式。


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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號