为了防止在我的项目的不同文件中存在多个依赖关系,并且因为我可能会改变数据的呈现方式,所以我决定在{到{#不是golang意义上,而是以体系结构方式)创建一个“接口” {3}}
由于我不需要任何其他内容,我只是重命名了其中一种类型:
type CanvasContext draw2dimg.GraphicContext
在我的一个模块中,我有以下代码(path是CanvasContext变量):
// initialization and some code omitted for clarity
path.SetFillColor(color.RGBA{0x44, 0xff, 0x44, 0xff})
path.SetStrokeColor(color.RGBA{0x44, 0x44, 0x44, 0xff})
path.SetLineWidth(5)
// some more code here
path.Close()
path.FillStroke()
在路径上的所有方法调用中,只有FillStroke因编译错误而失败:
path.FillStroke undefined(type * drawing.CanvasContext没有字段或 方法FillStroke)
为了防止这种情况,我必须重新定义FillStroke,而不是任何其他方法:
func (cc *CanvasContext) FillStroke() {
gc := draw2dimg.GraphicContext(*cc)
gc.FillStroke()
}
为什么我只需要重新定义那个而不是任何其他来电?
答案 0 :(得分:2)
你应该使用struct embedding而不是type define。检查结构' embedding'文件:
然后推广字段的方法并满足io 接口,我们还需要提供转发方法,比如 这样:
func(rw * ReadWriter)读取(p [] byte)(n int,err error){ return rw.reader.Read(p)}
通过直接嵌入结构,我们避免了这种簿记。