此代碼有一些對(duì)象代表用戶和創(chuàng)建該用戶的管理員。它是申請(qǐng)人提交給我們的一些代碼的精簡(jiǎn)版。當(dāng)您嘗試刪除用戶時(shí),代碼已損壞并刪除管理員(如 所示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 回答

繁華開滿天機(jī)
TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊
在您的示例代碼中e
,UserDelete
方法中的字母e
與 AdminDelete
方法中的字母編碼不同。由于 Go 支持 utf8,這不是錯(cuò)誤,而是一種不同的方法。修復(fù)e
in User 的Delete
方法,一切都應(yīng)該按預(yù)期工作。

狐的傳說(shuō)
TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
因?yàn)橛脩舻?delete 方法是為 *User 而不是 for 定義的User,而 Admin 的 Delete 是為非指針定義的Admin。用戶嵌入了 Admin,因此它繼承了func (Admin) Delete()方法。
嘗試使用指向用戶的指針(注意&)
func main() {
u := &user.User{&admin.Admin{}}
u.Delete()
}
- 2 回答
- 0 關(guān)注
- 203 瀏覽
添加回答
舉報(bào)
0/150
提交
取消