Как может структура реализовывать интерфейс, не реализовав все методы интерфейса?
Создаю свой хендлер для логирования, свомощью пакета slog. По докам я должен реализовать интерфейс Handler. То есть его 4 метода:
- Enabled(context.Context, Level) bool
- Handle(context.Context, r Record) error
- WithAttrs(attrs []Attr) Handler
- WithGroup(name string) Handler
Но я пишу такой код:
import (
"context"
"log/slog"
"os"
)
type MyHandler struct {
slog.Handler
}
func (h MyHandler) Handle(ctx context.Context, r slog.Record) error {
return h.Handler.Handle(ctx, r)
}
func main() {
// создаю хендлер
h := &MyHandler{slog.NewJSONHandler(os.Stdout, nil)}
logger := slog.New(h)
logger.Info("Message")
// {"time":"2024-07-04T10:28:45.278528589+04:00","level":"INFO","msg":"Message"}
}
Функция slog.New() принимать только Handler. Для своей структуры MyHandler я реализовал только метод Handle и остальные не реализовал. Значит она не может реализовывать интерфейс Handler. Но все работает. Как это может быть? Компилятор должен послать меня.
Ответы (1 шт):
Автор решения: Xander
→ Ссылка
Вы внутри своей структуры используете slog.Handler. Таким образом ваш хэндлер получает автоматом все методы, которые поддерживает slog.Handler