我尝试模拟一些结构进行单元测试,并使用以下站点我写了以下内容:实干家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 回答
![?](http://img1.sycdn.imooc.com/545863080001255902200220-100-100.jpg)
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 关注
- 666 浏览
添加回答
举报
0/150
提交
取消