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

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

恐慌:接口轉換:接口 {} 是字符串,而不是 float64

恐慌:接口轉換:接口 {} 是字符串,而不是 float64

Go
神不在的星期二 2022-10-24 15:18:33
我正在嘗試將這個簡單的 python 函數轉換為 golang,但是遇到了這個錯誤的問題panic: interface conversion: interface {} is string, not float64pythondef binance(crypto: str, currency: str):    import requests    base_url = "https://www.binance.com/api/v3/avgPrice?symbol={}{}"    base_url = base_url.format(crypto, currency)      try:        result = requests.get(base_url).json()        print(result)        result = result.get("price")    except Exception as e:                return False    return result這是 golang 版本(比應該的更長的代碼和更復雜的代碼)func Binance(crypto string, currency string) (float64, error) {    req, err := http.NewRequest("GET", fmt.Sprintf("https://www.binance.com/api/v3/avgPrice?symbol=%s%s", crypto, currency), nil)    if err != nil {         fmt.Println("Error is req: ", err)    }        client := &http.Client{}        resp, err := client.Do(req)    if err != nil {        fmt.Println("error in send req: ", err)    }    respBody, _ := ioutil.ReadAll(resp.Body)    var respMap map[string]interface{}    log.Printf("body=%v",respBody)    json.Unmarshal(respBody,&respMap)     log.Printf("response=%v",respMap)    price := respMap["price"]    log.Printf("price=%v",price)    pricer := price.(float64)    return pricer, err}那么我在這里做錯了什么?以前我有錯誤cannot use price (type interface {}) as type float64 in return argument: need type assertion,現在我嘗試了類型斷言,pricer := price.(float64)現在這個錯誤panic: interface conversion: interface {} is string, not float64
查看完整描述

2 回答

?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

它在錯誤中告訴你,price是一個字符串,而不是 float64,所以你需要做(大概):


pricer := price.(string)

return strconv.ParseFloat(pricer, 64)

更好的方法可能是改為


type response struct {

    Price float64 `json:",string"`

}

r := &response{}

respBody, _ := ioutil.ReadAll(resp.Body)

err := json.Unmarshal(respBody, r) 

return r.Price, err

“字符串”選項表示字段在 JSON 編碼的字符串中存儲為 JSON。它僅適用于字符串、浮點、整數或布爾類型的字段。


https://pkg.go.dev/encoding/json#Marshal


查看完整回答
反對 回復 2022-10-24
?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

錯誤已經告訴你:價格是一個字符串。所以它可能來自一個看起來像這樣的 JSON:


{

   "price": "123"

}

但不是


{

   "price": 123

}

第一個解組為字符串。第二個解組為 float64。


在您的情況下,您必須解析它:


    pricer,err := strconv.ParseFloat(price.(string),64)


查看完整回答
反對 回復 2022-10-24
  • 2 回答
  • 0 關注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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