能够随意地为各种类型起名字,是否意味着可以在自己包里为这些类型任意添加方法 ? 参见下面的代码演示 :
package main
import "time"
type MyDuration = time.Duration
func (m MyDuration) Set() {
}
func main() {
}
编译后报错:
./temp.go:7:6: cannot define new methods on non-local type time.Duration
编译器提示:不能在一个非本地的类型 time.Duration
上定义新方法。
非本地方法指的就是使用 time.Duration
的代码所在的包,也就是 main
包。因为 time.Duration
是在 time
包中定义的,在 main
包中使用。 time.Duration
包与 main
包不在同 一个包中,因此不能为不在一个包中的类型定义方法。
解决这个问题有下面两种方法 :
- 将第 8 行修改为
type MyDuration time.Duration
,也就是将MyDuration
从别名改为类型; - 将
MyDuration
的别 名定 义放在time
包中 ;