Go接口:无法为未导出的字段赋值

我尝试模拟一些结构进行单元测试,并使用以下站点


我写了以下内容:


实干家


package user


import "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 user


type 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接口签名


红颜莎娜
浏览 667回答 1
1回答

holdtom

该错误表明这doer是一个未导出的字段,因此无法从另一个包访问。根据您是否希望它可以访问,您可以更改要导出的声明:package usertype User struct {    Doer Doer}func (u *User) UseDoer() {    u.Doer.Do(1, "abc")}或者你可以使用类似于构造函数的东西:package userfunc 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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go