此代码有一些对象代表用户和创建该用户的管理员。它是申请人提交给我们的一些代码的精简版。当您尝试删除用户时,代码已损坏并删除管理员(如 所示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,这不是错误,而是一种不同的方法。修复e
in User 的Delete
方法,一切都应该按预期工作。
狐的传说
TA贡献1804条经验 获得超3个赞
因为用户的 delete 方法是为 *User 而不是 for 定义的User,而 Admin 的 Delete 是为非指针定义的Admin。用户嵌入了 Admin,因此它继承了func (Admin) Delete()方法。
尝试使用指向用户的指针(注意&)
func main() {
u := &user.User{&admin.Admin{}}
u.Delete()
}
- 2 回答
- 0 关注
- 169 浏览
添加回答
举报
0/150
提交
取消