我正在用Golang编写图像转换器程序。这是我的文件之一。
package main
import (
"image"
"image/gif"
"image/jpeg"
"image/png"
"io"
)
type Converter interface {
convimg(io.Writer) error
}
type jpgConverter struct {
img image.Image
}
type pngConverter struct {
img image.Image
}
type gifConverter struct {
img image.Image
}
func convert(c Converter) error {
return c.convimg //compile error
}
func (c jpgConverter) convimg(dist io.Writer) error {
return jpeg.Encode(dist, c.img, nil)
}
func (c pngConverter) convimg(dist io.Writer) error {
return png.Encode(dist, c.img)
}
func (c gifConverter) convimg(dist io.Writer) error {
return gif.Encode(dist, c.img, nil)
}
我使用界面进行鸭子输入,因此我可以使用一种相同的方法进行类型转换。
但是convert
方法中发生了编译错误,并且错误消息显示为cannot use c.convimg (type func(io.Writer) error) as type error in return argument: func(io.Writer) error does not implement error (missing Error method)
。
我在界面中将error
定义为返回类型,但是错在哪里呢?
答案 0 :(得分:0)
如上所述,return c.convimg
返回一个函数。我应该这样写:
func convert(c Converter, w io.Writer) error
return c.convimg(w)