Roo*_*oft 0 json go unmarshalling
我正在尝试从Bitfinex API获取交易并在屏幕上打印它们.一切都很好,除了时间.
我想知道为什么他们总是在这个例子中打印为0001-01-01 00:00:00 ......
在UnmarshalJSON中,"t"包含我需要的时间.它似乎并没有坚持贸易结构.
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strconv"
"time"
)
type Trade struct {
Tid int
Timestamp myTime
}
type myTime time.Time
func (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
}
Run Code Online (Sandbox Code Playgroud)
您可以在指针接收器上解组..否则您只是复制不相关的数据:
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
}
Run Code Online (Sandbox Code Playgroud)
我不确定这是如何"安全"/"惯用"这是在指针接收器中重新分配数据..有人可以澄清吗?
(这工作顺便..不确定它的"最佳实践")
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |