Код IT
← Каталог

Важные интерфейсы и типы Go — 5.3. Опциональное поведение через проверку интерфейса

Фрагмент из «Важные интерфейсы и типы Go»: 5.3. Опциональное поведение через проверку интерфейса.

Go main.go
type Flusher interface {
    Flush() error
}

func sendResponse(w io.Writer, data []byte) error {
    _, err := w.Write(data)
    if err != nil {
        return err
    }

    if f, ok := w.(Flusher); ok {
        return f.Flush()
    }
    return nil
}
type Flusher interface {
    Flush() error
}

func sendResponse(w io.Writer, data []byte) error {
    _, err := w.Write(data)
    if err != nil {
        return err
    }

    if f, ok := w.(Flusher); ok {
        return f.Flush()
    }
    return nil
}