Интерфейс не реализует ошибку (отсутствует метод Error) - PullRequest
0 голосов
/ 11 ноября 2018

Я пишу программу конвертации изображений с 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 как тип возвращаемого значения в интерфейсе, но где неправильная точка?

1 Ответ

0 голосов
/ 11 ноября 2018

Как указано выше, return c.convimg возвращает функцию. Я должен написать это как:

func convert(c Converter, w io.Writer) error
    return c.convimg(w) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...