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

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

在 Go 程序中時間總是 0

在 Go 程序中時間總是 0

Go
慕婉清6462132 2021-08-16 19:46:33
我在這里嘗試從 Bitfinex API 獲取交易并將它們打印在屏幕上。一切正常,除了時間。我想知道為什么在這個例子中他們總是打印為 0001-01-01 00:00:00 ......在 UnmarshalJSON 中,“t”包含我需要的時間。它似乎不符合貿易結構。package mainimport (        "encoding/json"        "fmt"        "io/ioutil"        "net/http"        "strconv"        "time")type Trade struct {        Tid       int        Timestamp myTime}type myTime time.Timefunc (t myTime) String() string {        when := time.Time(t)        return when.Format("2006-01-02 15:04:05")}func (t myTime) UnmarshalJSON(b []byte) error {        ts, err := strconv.Atoi(string(b))        if err != nil {                return err        }        t = myTime(time.Unix(int64(ts), 0))        return nil}func main() {        trades, _ := GetTrades()        for _, trade := range trades {                fmt.Printf("%d - %s\n", trade.Tid, trade.Timestamp)        }}func GetTrades() (trades []Trade, err error) {        r, err := http.Get("https://api.bitfinex.com/v1/trades/BTCUSD")        defer r.Body.Close()        body, _ := ioutil.ReadAll(r.Body)        json.Unmarshal(body, &trades)        return}
查看完整描述

2 回答

?
夢里花落0921

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

您可以在指針接收器上解組 .. 否則您只是在復制不相關的數據:


func (t *myTime) UnmarshalJSON(b []byte) error {

    //  ^^^^^^^ this

    ts, err := strconv.Atoi(string(b))

    if err != nil {

            return err

    }


    *t = myTime(time.Unix(int64(ts), 0))

 // ^^ this too


    return nil

}

我不確定在指針接收器中重新分配數據有多“安全”/“慣用”..有人可以澄清嗎?


(順便說一句,這有效......不確定它是否是“最佳實踐”)


查看完整回答
反對 回復 2021-08-16
?
隔江千里

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

您不能分配UnmarshalJSON給一個值,您必須使用指針或結構,一種方法是:


type MyTime struct {

    time.Time

}


func (t MyTime) String() string {

    when := time.Time(t.Time)

    return when.Format("2006-01-02 15:04:05")

}


func (t *MyTime) UnmarshalJSON(b []byte) error {

    ts, err := strconv.Atoi(string(b))

    if err != nil {

        return err

    }

    t.Time = time.Unix(int64(ts), 0)


    return nil

}


查看完整回答
反對 回復 2021-08-16
  • 2 回答
  • 0 關注
  • 296 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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