我有一个命名类型,我需要做一些JSON unmarshmaling:
type StartTime time.Time
func (st *StartTime) UnmarshalJSON(b []byte) error {...}
由于StartTime
是time.Time
,我认为我可以调用属于time.Time
的方法,例如Date()
:
myStartTime.Date() // myStartTime.Date undefined (type my_package.StartTime has no field or method Date)
如何在保留原始方法的同时将方法添加到现有类型?
答案 0 :(得分:4)
使用type
关键字创建新类型,因此它不具有基础类型的方法。
使用嵌入:
type StartTime struct {
time.Time
}
如果
f
是一个合法选择器,那么结构x
中的匿名字段的字段或methodx.f
称为已提升该字段或方法f
。
因此,嵌入(匿名)字段的所有方法和字段都会被提升并可以被引用。
使用它的示例:
type StartTime struct {
time.Time
}
func main() {
s := StartTime{time.Now()}
fmt.Println(s.Date())
}
输出(在Go Playground上尝试):
2009 November 10