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

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

Golang - Ristretto Cache 返回 base 64

Golang - Ristretto Cache 返回 base 64

慕絲7291255 2022-10-10 20:00:26
我在使用 ristretto 緩存時(shí)遇到問題。事實(shí)上,我有一個(gè)小 api 應(yīng)該返回我存儲在我的 ristretto 緩存中作為 json 的值。問題是當(dāng)我調(diào)用我的函數(shù)時(shí),返回的是用base64編碼的json,我只是找不到解碼它的方法。這是我的代碼:第 1 部分:初始化我的 ristretto 緩存的代碼:func InitCache() {    var err error    ristrettoCache, err = ristretto.NewCache(&ristretto.Config{        NumCounters: 3000,        MaxCost: 1e6,        BufferItems: 64,    })    if err != nil {        panic(err)    }}第 2 部分:將我的值放入緩存中:for _, t := range listTokensFromDB {    b, err := json.Marshal(t)    if err != nil {        fmt.Println(err)    }    ristrettoCache.Set(t.Symbol, b, 1)}第 3 部分:從緩存中獲取值func getTokenInfo(w http.ResponseWriter, r *http.Request){    vars := mux.Vars(r)    key := vars["chain"]+vars["symbol"]    value, found := ristrettoCache.Get(key)    if !found {        return    }    json.NewEncoder(w).Encode(value)}當(dāng)我調(diào)用我的 api 時(shí),我得到的結(jié)果是:"eyJTeW1ib2wiOiJic2NDUllQVE8iLCJBZGRyIjoiMHgyQmNBMUFlM0U1MjQ0NzMyM0IzRWE0NzA4QTNkMTg1ODRDYWY4NWE3IiwiTHBzIjpbeyJTeW1ib2xUb2tlbiI6IkZFRyIsIlRva2VuQWRkciI6IjB4YWNGQzk1NTg1RDgwQWI2MmY2N0ExNEM1NjZDMWI3YTQ5RmU5MTE2NyIsIkxwQWRkciI6IjB4NDU5ZTJlMjQ4NGNlMDU2MWRmNTJiYzFlNjkxMzkyNDA2M2JhZDM5MCJ9LHsiU3ltYm9sVG9rZW4iOiJmQk5CIiwiVG9rZW5BZGRyIjoiMHg4N2IxQWNjRTZhMTk1OEU1MjIyMzNBNzM3MzEzQzA4NjU1MWE1Yzc2IiwiTHBBZGRyIjoiMHg3OGM2NzkzZGMxMDY1OWZlN2U0YWJhMTQwMmI5M2Y2ODljOGY0YzI3In1dfQ=="但我想要base64解碼的版本......如果我在將值 b 插入緩存時(shí)將其更改為字符串,如下所示:for _, t := range listTokensFromDB {        b, err := json.Marshal(t)        if err != nil {            fmt.Println(err)        }        ristrettoCache.Set(t.Symbol, string(b), 1)    }當(dāng)我得到響應(yīng)時(shí),我得到這樣的字符串化 json:“{“Symbol”:“bscCRYPTO”,“Addr”:“0x2BcA1Ae3E52447323B...”而且我找不到擺脫這個(gè)字符串的方法:/有人會知道我怎樣才能得到真正的json嗎?提前謝謝你,祝你有美好的一天!
查看完整描述

1 回答

?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊

根據(jù)我的評論,我的意思是,在這一行中,value最有可能是類型[]byte(或[]uint8- 這是同一件事)


value, found := ristrettoCache.Get(key)

JSON 編碼 a[]byte將隱式地 base64 輸出 - 因?yàn)?JSON 是基于文本的。


json.NewEncoder(w).Encode(value) // <- value is of type []byte

檢查您發(fā)布的 base64 ( https://play.golang.org/p/NAVS4qRfDM2 ) 底層二進(jìn)制字節(jié)已經(jīng)用 JSON 編碼 - 所以不需要額外json.Encode的。


只需在處理程序中輸出原始字節(jié) - 并將內(nèi)容類型設(shè)置為application/json:


func getTokenInfo(w http.ResponseWriter, r *http.Request){

    vars := mux.Vars(r)

    key := vars["chain"]+vars["symbol"]

    value, found := ristrettoCache.Get(key)

    if !found {

        return

    }


    // json.NewEncoder(w).Encode(value) // not this


    w.Header().Set("Content-Type", "application/json")


    if bs, ok := value.([]byte); ok {

        _, err := w.Write(bs) //raw bytes (already encoded in JSON)


        // check 'err'

    } else {

        // error unexpected type behind interface{}

    }

}


查看完整回答
反對 回復(fù) 2022-10-10
  • 1 回答
  • 0 關(guān)注
  • 217 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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