调用命名类型的方法

时间:2015-10-19 08:33:34

标签: inheritance methods go

我有一个命名类型,我需要做一些JSON unmarshmaling:

type StartTime time.Time
func (st *StartTime) UnmarshalJSON(b []byte) error {...}

由于StartTimetime.Time,我认为我可以调用属于time.Time的方法,例如Date()

myStartTime.Date() // myStartTime.Date undefined (type my_package.StartTime has no field or method Date)

如何在保留原始方法的同时将方法添加到现有类型?

1 个答案:

答案 0 :(得分:4)

使用type关键字创建新类型,因此它不具有基础类型的方法。

使用嵌入:

type StartTime struct {
    time.Time
}

引用Spec: Struct types

  

如果f是一个合法选择器,那么结构x中的匿名字段的字段或method x.f称为已提升该字段或方法f

因此,嵌入(匿名)字段的所有方法和字段都会被提升并可以被引用。

使用它的示例:

type StartTime struct {
    time.Time
}

func main() {
    s := StartTime{time.Now()}
    fmt.Println(s.Date())
}

输出(在Go Playground上尝试):

2009 November 10