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

在 golang 中,在自定义类型上实现方法,因此不需要在 Println 中强制转换

在 golang 中,在自定义类型上实现方法,因此不需要在 Println 中强制转换

Go
SMILET 2022-08-15 16:27:56
我对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()
}


查看完整回答
反对 回复 2022-08-15
  • 1 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

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