为了账号安全,请及时绑定邮箱和手机立即绑定

在 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 关注
  • 272 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信