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

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

Go接口:無法為未導出的字段賦值

Go接口:無法為未導出的字段賦值

Go
紅顏莎娜 2022-05-17 16:50:03
我嘗試模擬一些結構進行單元測試,并使用以下站點我寫了以下內容:實干家package userimport "errors"type Doer interface {    Do(int, string) error}type DoerImp struct {}func (d *DoerImp)Do(val int, str string) error{    if val == 3{        return errors.New("Some error")    }    return nil}用戶package usertype User struct {    doer Doer}func (u *User) UseDoer() {    u.doer.Do(1, "abc")}從主要我想運行這段代碼:c := &user.DoerImp{}u := user.User{c}u.UseDoer()但是我收到一個錯誤:Cannot assign value to unexported field 'doer'我做錯了什么?我的c值有Doer接口簽名
查看完整描述

1 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

該錯誤表明這doer是一個未導出的字段,因此無法從另一個包訪問。


根據您是否希望它可以訪問,您可以更改要導出的聲明:


package user


type User struct {

    Doer Doer

}


func (u *User) UseDoer() {

    u.Doer.Do(1, "abc")

}

或者你可以使用類似于構造函數的東西:


package user


func New(doer Doer) *User {

    return &User{doer}

}


type User struct {

    doer Doer

}


func (u *User) UseDoer() {

    u.doer.Do(1, "abc")

}

然后你可以像這樣使用它:


u := user.New{&user.DoerImp{}}

u.UseDoer()


查看完整回答
反對 回復 2022-05-17
  • 1 回答
  • 0 關注
  • 739 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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