此代碼有一些對象代表用戶和創建該用戶的管理員。它是申請人提交給我們的一些代碼的精簡版。當您嘗試刪除用戶時,代碼已損壞并刪除管理員(如 所示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 關注
- 210 瀏覽
添加回答
舉報
0/150
提交
取消