1 回答
TA贡献1818条经验 获得超11个赞
worker=u和work=&u是有效的,因为在本例中实现了仅具有接收者值的方法User的所有方法。值方法可以在值和指针上调用。WorkerWorkworker=p无效,因为使用接收者指针People实现方法。因此,如果您向指针Work分配任何值,则 if 不会执行方法。这就是为什么它是无效的。PeopleWorkerWorkworker=&p作为People实现Work方法有效。User 和 People 是实现相同接口的两个不同的结构
Worker。这确保两者都有一个已命名的方法Work,但实现可能不同。
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 关注
- 169 浏览
添加回答
举报
