當(dāng)定義了一個interface现横,傳參時需要注意實現(xiàn)函數(shù)對interface的實現(xiàn)是基于指針的還是對像的。傳參時需要與實現(xiàn)對應(yīng),否則會編譯報錯戒祠。
如下例Hello對Callback 的實現(xiàn)是基于指針的func (h *Hello) Myprint(str string) 骇两,則在testCallback(&Hello{})時傳的是指針;不能用testCallback(Hello{})姜盈。
如果改成func (h Hello) Myprint(str string)低千,則可以用testCallback(Hello{})。
type Hello struct {
}
func (h *Hello) Myprint(str string){
fmt.Println("this is a callback,",str);
return
}
type Callback interface {
Myprint(str string)
}
func testCallback (c Callback){
c.Myprint("hello");
fmt.Println("this is a test callback");
}
func main() {
testCallback(&Hello{})
}