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