I'm writing image converter program with Golang. Here's one of my file.
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)
}
I use interface for duck typing so that I can use one same method for any type conversion.
But a compile error occurred in convert
method, and the error message says 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)
.
I define error
as return type in the interface, but Where's the wrong point?