我是 Go 的新手,我正在研究它的界面功能。
这是代码:
package main
import (
"fmt"
"reflect"
)
type Integer int
func (a Integer) Less(b Integer) bool {
return a < b
}
func (a *Integer) Add(b Integer) {
*a += b
}
type LessAdder interface {
Less(b Integer) bool
Add(b Integer)
}
var a Integer = 1
var b LessAdder = &a
func main() {
fmt.Println(reflect.TypeOf(b))
fmt.Println(b.Less(2))
b.Add(a)
fmt.Println(a)
}
它将输出以下内容:
*main.Integer
true
2
嗯,这很好用。
重点是:如何var b LessAdder = &a运作。指针自动取消引用是在这里发生,还是在 b 调用成员方法时发生?
输出*main.Integer告诉我们 b 是指向 type 的指针Integer,因此是第二种情况。
然后棘手的事情来了:当我添加fmt.Pringln(*b)到代码中时,编译器出现错误:
demo/demo1
./demo1.go:31: invalid indirect of b (type LessAdder)
这让我很困惑。由于b是指向 的指针类型Integer,因此取消引用它应该可以工作。但为什么不呢?
有只小跳蛙
森栏
相关分类