在命名类型上调用方法
在 Go 中,命名类型是从现有数据类型创建的新数据类型。这对于向基础类型添加自定义方法非常有用,例如在解组 JSON 数据的情况下。但是,当以下面所示的方式创建命名类型时,它会失去调用基础类型的方法的能力:
type StartTime time.Time
例如,尝试在 myStartTime 上调用 Date() 方法会导致错误:myStartTime.Date undefined(类型my_package.StartTime没有字段或方法Date)。
解决方案:拥抱嵌入
要解决此问题并保留底层类型的原始方法,可以使用嵌入。通过嵌入基础类型,命名类型继承其所有方法和字段。这个过程如下所示:
type StartTime struct { time.Time }
在这种情况下,time.Time 的所有方法和字段都被“提升”并可以通过命名类型进行访问。因此,在 StartTime 类型的变量 s 上调用 Date() 不再引发错误。
示例展示:
type StartTime struct { time.Time } func main() { s := StartTime{time.Now()} fmt.Println(s.Date()) }
此代码生成以下内容输出:
2009 November 10
通过使用嵌入,您可以轻松扩展现有类型的功能同时保留其原有功能。
以上是为什么我无法在 Go 中调用命名类型的方法,嵌入如何解决这个问题?的详细内容。更多信息请关注PHP中文网其他相关文章!