5-3 方法调用和本质
03 别名定义
type X int
type Y = X
//go:noinline
func (x X) A() { println("X.A") }
//go:noinline
func (y Y) B() { println("Y.B") }
func main() {
var x X
x.A()
x.B()
}
$ go build && go tool objdump -s "main\.main" test
编译器将别名视作目标类型。
X
类型定义别名Y
,可以基于X
定义方法也可以基于Y
定义方法。编译器别名定义编译出来都是基于X.A
、X.B
,把别名还原。
有时