Почему интерфейс os.Signal включает явно бесполезный метод?

Я нашел это объявление в пакете «os/signal»:

type Signal interface {
    String() string
    Signal() // to distinguish from other Stringers
}

Какие потенциальные проблемы решаются добавлением, казалось бы, бесполезного метода «отличения от других стрингеров»?

Это просто для того, чтобы вы не могли передать какое-либо несигнальное значение, имеющее «общий» метод String() string, где на самом деле необходим сигнал.

icza 05.09.2024 09:03
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
1
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

К каким типам можно перейти signal.Ignore(sig os.Signal)? Если os.Signal есть interface { String() string }, то может показаться, что это что-то с методом String() string, что неверно. Добавляя в интерфейс «бесполезные» Signal(), набор типов, которые можно использовать, сужается.

Например, если вы используете gopls для поиска типов, реализующих интерфейс, добавление «бесполезного» метода приведет к тому, что он найдет нужные типы, как правило, без ложных срабатываний.

Этот механизм добавления фиктивного метода для ограничения типов не идеален, но это разумный прагматичный выбор.

Другие вопросы по теме