我對golang很陌生。以下代碼修改自: https://jordanorelli.com/post/32665860244/how-to-use-interfaces-in-go為什么 Println 調用中的最后一行中必填項?time.Time()為什么打印 不產生相同的字符串結果?它改為生成一個指針。val["created_at"]您將看到我嘗試了幾次創建與自定義時間戳類型一起使用的 Println 函數。是否可以在 Timestamp 自定義類型上定義一個函數,以便代碼末尾的 Println 函數輸出字符串而不是指針?我想這可能也回答了我的問題:https://stackoverflow.com/a/6485229/4005067但是有沒有辦法定義時間戳類型的某些函數,以便不需要強制轉換?package mainimport ( "encoding/json" "fmt" "reflect" "time")// start with a string representation of our JSON datavar input = `{ "created_at": "Thu May 31 00:00:01 +0000 2012"}`type Timestamp time.Timefunc (t *Timestamp) UnmarshalJSON(b []byte) error { v, err := time.Parse(time.RubyDate, string(b[1:len(b)-1])) if err != nil { return err } *t = Timestamp(v) return nil}//func (t *Timestamp) Println(a ...interface{}) (n int, err error) {// return fmt.Println(time.Time(*t))//}//func (t Timestamp) String() string {// return string(t)//}func main() { // our target will be of type map[string]interface{}, which is a pretty generic type // that will give us a hashtable whose keys are strings, and whose values are of // type interface{} var val map[string]Timestamp if err := json.Unmarshal([]byte(input), &val); err != nil { panic(err) } fmt.Println(val) for k, v := range val { fmt.Println(k, reflect.TypeOf(v)) } fmt.Println(val["created_at"]) fmt.Println(reflect.TypeOf(val["created_at"])) fmt.Println(Timestamp(val["created_at"])) fmt.Println(time.Time(val["created_at"]))}在操場上的輸出是:map[created_at:{0 63474019201 0x5b0580}]created_at main.Timestamp{0 63474019201 0x5b0580}main.Timestamp{0 63474019201 0x5b0580}2012-05-31 00:00:01 +0000 UTC
1 回答

梵蒂岡之花
TA貢獻1900條經驗 獲得超5個贊
定義一種方法是一種方法,就像你上面嘗試的那樣。通過一些小的修改,我們可以使它工作。String
func (t Timestamp) String() string { return time.Time(t).String() }
- 1 回答
- 0 關注
- 90 瀏覽
添加回答
舉報
0/150
提交
取消