2 回答
TA贡献1860条经验 获得超8个赞
问题是您使用的是非指针接收器:
func (b BaseVideo) Download() (err error) {
b.fileContent = bytes.NewReader([]byte("abc"))
return nil
}
这意味着您的Download()方法会获取您正在调用它的值的副本BaseVideo。您在方法内部修改此副本(您为该字段分配一个新Reader的fileContent),但BaseVideo 不会修改原始副本。
解决方案:使用指针接收器:
func (b *BaseVideo) Download() (err error) {
b.fileContent = bytes.NewReader([]byte("abc"))
return nil
}
当然如果把接收者修改为指针,该类型BaseVideo将不再实现Video接口,只有指向 的指针BaseVideo,所以也要修改NewBaseVideo为返回指向结构体值的指针:*BaseVideo。您可以通过获取结构文字的地址来实现这一点:
func NewBaseVideo(path, name string) Video {
return &BaseVideo{
Path: path,
Name: name,
}
}
TA贡献1779条经验 获得超6个赞
如果你想改变方法中的值,方法的接收者应该是一个指针。代替
func (b BaseVideo) Download() (err error)
和这样的
func (b *BaseVideo) Download() (err error)
操场上的工作代码:https : //play.golang.org/p/hZ8-RwzVYh。
- 2 回答
- 0 关注
- 142 浏览
添加回答
举报