为了账号安全,请及时绑定邮箱和手机立即绑定

在对象的字段而不是对象上调用方法?

在对象的字段而不是对象上调用方法?

Go
慕容3067478 2021-08-16 15:51:05
此代码有一些对象代表用户和创建该用户的管理员。它是申请人提交给我们的一些代码的精简版。当您尝试删除用户时,代码已损坏并删除管理员(如 所示main)。为什么u.Delete叫admin的delete而不是user的delete?package adminimport "fmt"type Admin struct {}func (Admin) Delete() {    fmt.Println("deleting admin")}package userimport (    "fmt"    "admin")type User struct {*admin.Admin}func (*User) D𝚎lete() {    fmt.Println("deleting user")}package mainimport (    "admin"    "user")func main() {    u := user.User{&admin.Admin{}}    u.Delete()}$ GOPATH=`pwd` go run a.go deleting admin
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

在您的示例代码中e,UserDelete方法中的字母e与 AdminDelete方法中的字母编码不同。由于 Go 支持 utf8,这不是错误,而是一种不同的方法。修复ein User 的Delete方法,一切都应该按预期工作。


查看完整回答
反对 回复 2021-08-16
?
狐的传说

TA贡献1804条经验 获得超3个赞

因为用户的 delete 方法是为 *User 而不是 for 定义的User,而 Admin 的 Delete 是为非指针定义的Admin。用户嵌入了 Admin,因此它继承了func (Admin) Delete()方法。


尝试使用指向用户的指针(注意&)


func main() {

    u := &user.User{&admin.Admin{}}

    u.Delete()

}


查看完整回答
反对 回复 2021-08-16
  • 2 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信