1 回答

TA貢獻(xiàn)1818條經(jīng)驗 獲得超11個贊
worker=u
和work=&u
是有效的,因為在本例中實現(xiàn)了僅具有接收者值的方法User
的所有方法。值方法可以在值和指針上調(diào)用。Worker
Work
worker=p
無效,因為使用接收者指針People
實現(xiàn)方法。因此,如果您向指針Work
分配任何值,則 if 不會執(zhí)行方法。這就是為什么它是無效的。People
Worker
Work
worker=&p
作為People
實現(xiàn)Work
方法有效。User 和 People 是實現(xiàn)相同接口的兩個不同的結(jié)構(gòu)
Worker
。這確保兩者都有一個已命名的方法Work
,但實現(xiàn)可能不同。
package main
import (
"fmt"
)
type Worker interface {
Work()
}
type User struct {
name string
}
func (u User) Work() {
fmt.Printf("Name : %s\n", u.name)
}
type People struct {
name string
}
func (p *People) Work() {
fmt.Printf("Name : %s\n", p.name)
}
func main() {
var worker Worker
u := User{name: "uuu"}
worker = u // valid
worker = &u // valid
worker.Work()
p := People{name: "pppp"}
// worker = p // invalid
worker = &p // valid
worker.Work()
}
- 1 回答
- 0 關(guān)注
- 123 瀏覽
添加回答
舉報