为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 666 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信