参阅文件:
类型可能具有与之关联的方法集。接口类型的方法集是其接口。其他任何类型的方法集都
T
包含使用接收器类型声明的所有方法T。对应的指针类型的方法集*T是使用接收器*T或声明的所有方法的集合T(也就是说,它也包含的方法集T)。进一步的规则适用于包含匿名字段的结构,如有关结构类型的部分中所述。其他任何类型的方法集都为空。在方法集中,每个方法必须具有唯一的非空白方法名称。如果您有一个接口
I,并且I方法集中的某些或全部方法是由接收者为的方法提供的*T(其余方法由接收者为的方法提供T),则*T满足该接口I,但T不满足。那是因为*T的方法集包含T,但不是这样。
使用
ctrl := Pages{}制造错误:cannot use ctrl (type Pages) as type Handler in argument to Handle:Pages does not implement Handler (Serve method has pointer receiver)
使用
ctrl := Pages{}需求:func (p Pages) Serve() { fmt.Println(p.i)}虹膜处理程序是一种接口类型。像这个工作示例(请参阅评论):
package mainimport "fmt"type Handler interface { Serve()}type Pages struct { i int}func (p *Pages) Serve() { fmt.Println(p.i)}func Handle(p Handler) { p.Serve()}func main() { // cannot use ctrl (type Pages) as type Handler in argument to Handle: // Pages does not implement Handler (Serve method has pointer receiver) //ctrl := Pages{} ctrl := &Pages{101} Handle(ctrl)}输出:
101



