亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在對象的字段而不是對象上調用方法?

在對象的字段而不是對象上調用方法?

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 關注
  • 210 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號