我嘗試模擬一些結構進行單元測試,并使用以下站點我寫了以下內容:實干家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()
- 1 回答
- 0 關注
- 739 瀏覽
添加回答
舉報
0/150
提交
取消
