第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Go 接口繼承

Go 接口繼承

Go
月關(guān)寶盒 2022-08-24 17:04:13
我是Go的新手,不明白一件事。讓我們看一個(gè)有效的代碼:package mainimport "fmt"type User struct {    Name  string    Email string}type Admin struct {    User    Level string}type Notifier interface {    notify()}func (u *User) notify() {    fmt.Println("Notified", u.Name)}func SendNotification(notify Notifier) {    notify.notify()}func main() {    admin := Admin{        User: User{            Name:  "john smith",            Email: "john@email.com",        },        Level: "super",    }    SendNotification(&admin)    admin.User.notify()    admin.notify()}此處的函數(shù) SendNotification 將 admin 結(jié)構(gòu)識(shí)別為通告程序,因?yàn)?admin struct 可以訪問(wèn)通過(guò)指針接收器實(shí)現(xiàn)接口的嵌入式用戶結(jié)構(gòu)。還行。為什么下面的代碼不起作用。為什么norgateMathError需要實(shí)現(xiàn)接口而不使用錯(cuò)誤錯(cuò)誤的實(shí)現(xiàn)(對(duì)我來(lái)說(shuō)是同樣的情況):package mainimport (    "fmt"    "log")type norgateMathError struct {    lat  string    long string    err  error}// func (n norgateMathError) Error() string {//  return fmt.Sprintf("a norgate math error occured: %v %v %v", n.lat, n.long, n.err)// }func main() {    _, err := sqrt(-10.23)    if err != nil {        log.Println(err)    }}func sqrt(f float64) (float64, error) {    if f < 0 {        nme := fmt.Errorf("norgate math redux: square root of negative number: %v", f)        return 0, &norgateMathError{"50.2289 N", "99.4656 W", nme}    }    return 42, nil}.\custom_error.go:28:13: cannot use &norgateMathError{...} (type *norgateMathError) as type error in return argument:        *norgateMathError does not implement error (missing Error method)
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

在第一種情況下,嵌入在 里面,因此可以獲得對(duì)類(lèi)型上定義的所有方法的訪問(wèn)。UserAdminAdminUser

在第二種情況下,具有類(lèi)型字段,因此不會(huì)自動(dòng)訪問(wèn)其方法。norgateMathErrorerrError

如果你想有一個(gè)方法,你必須手動(dòng)定義它norgateMathErrorError()

func (n norgateMathError) Error() string {
  return n.err.Error()
}

嵌入字段和僅包含字段之間是有區(qū)別的。更多信息可以在參考資料中找到


查看完整回答
反對(duì) 回復(fù) 2022-08-24
  • 1 回答
  • 0 關(guān)注
  • 97 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)