Inheritance 调用命名类型的方法

Inheritance 调用命名类型的方法,inheritance,methods,go,Inheritance,Methods,Go,我有一个命名类型,我需要对其进行一些JSON解组: type StartTime time.Time func (st *StartTime) UnmarshalJSON(b []byte) error {...} 由于StartTime是一个time.time,我想我可以调用属于time.time的方法,比如Date(): 如何向现有类型添加方法,同时保留其原始方法?使用type关键字,您正在创建一个新类型,因此它将不具有基础类型的方法 使用嵌入: type StartTime struct

我有一个命名类型,我需要对其进行一些JSON解组:

type StartTime time.Time
func (st *StartTime) UnmarshalJSON(b []byte) error {...}
由于
StartTime
是一个
time.time
,我想我可以调用属于
time.time
的方法,比如
Date()


如何向现有类型添加方法,同时保留其原始方法?

使用
type
关键字,您正在创建一个新类型,因此它将不具有基础类型的方法

使用嵌入:

type StartTime struct {
    time.Time
}
引述:

如果
x.f
是表示该字段或方法的合法选择器,则结构
x
中匿名字段的字段或
f
称为promoted

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

使用它的示例:

type StartTime struct {
    time.Time
}

func main() {
    s := StartTime{time.Now()}
    fmt.Println(s.Date())
}
输出(在上尝试):


使用
type
关键字,您正在创建一个新类型,因此它将不具有基础类型的方法

使用嵌入:

type StartTime struct {
    time.Time
}
引述:

如果
x.f
是表示该字段或方法的合法选择器,则结构
x
中匿名字段的字段或
f
称为promoted

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

使用它的示例:

type StartTime struct {
    time.Time
}

func main() {
    s := StartTime{time.Now()}
    fmt.Println(s.Date())
}
输出(在上尝试):


不知道
促销
功能,谢谢@泰勒谢谢你的编辑。还编辑了操场上的代码并发布了新链接。不知道
促销
功能,谢谢@泰勒谢谢你的编辑。还编辑了操场上的代码并发布了新链接。有关嵌入/不嵌入自定义时间类型之间的差异的示例,请参阅。有关嵌入/不嵌入自定义时间类型之间的差异的示例,请参阅。