Примечание: я редактирую этот вопрос для конкретного примера того, почему я хочу это сделать, поэтому некоторые ответы могут больше не иметь смысла в контексте.
Я пишу немногокод, который передает данные от входа.Данные представлены в виде тегов, которые имеют идентификатор того, какие данные они содержат, а затем данные.
К сожалению, я не контролирую ввод и не знаю заранее, какие теги будут вэто, один может быть int, другой может быть строкой, а другой может быть массивом целых чисел.
Проблема возникает, когда мне нужно обработать все теги одного типа, например, если у меня есть фрагменттегов, функции, которая либо принимает, либо возвращает тег.
Решение, которое я до сих пор видел, состоит в том, чтобы определить фрагменты / функции с пустым интерфейсом, который позволил бы мне сделать это, однако этоэто нежелательно, так как он ничего не скажет другим людям, использующим пакет, о том, какие типы ожидаются, а также не поддается определению, прежде всего, о типизированном языке.
Интерфейсы, тем не менее, кажутся решениемздесь, и я хотел бы иметь Tag
интерфейс для передачи, который требует, хотя я определяю методына них, и на самом деле нет никаких методов, которые им нужны.
Мое текущее решение выглядит следующим образом
type Tag interface{
implementTag()
}
type TagInt int
func (tag TagInt) implementTag() {}
type TagString string
func (tag TagInt) implementTag() {}
Хотя это действительно работает и решает мою проблему, необходимость определения фиктивных методов только дляэто очень неправильно.
Итак, мой вопрос сводится к следующему: есть ли способ, которым я могу определить, что что-то является Tag
без необходимости определения фиктивных методов?