ну вот раз уж про го-вей. Я пытаюсь придумать как на гошных дженериках реализовать опции. Такие чтобы у нас есть например пять функций, где они принимаются. И можно было определять как common опции (то есть доступные для всех пяти, плюс для любых новых без неободимхости менять код этих опций), так и опции для конкретных функций. Как бонус фича - опции, которые можно применить к 3 из 5 функций.
Но именно так, чтобы это было все discoverable в компил тайме (то есть как раз дженерики).
Через интерфейсы это сделать нельзя, кроме случая когда ты пишешь интерфейсы на все возможные пересечения по функциям (в том числе интерфейс для common должен включать все эти пять и все новые, которые птом появятся). Потому что на интерфейсах нет OR типа, есть только AND.
На дженериках в других языках (плюсы, раст, скала) такое пишется очень легко. Но в гошных нет:
- перегрузки функций
- специализиции дженериков
- вариадик дженериков
- нельзя пихать в тайп сет интерфейс с методами
- структуры, запихнутые в тайп сет должны строго совпадать по количеству и типу полей
Пока что с такими ограничениями я не смог придумать (думал правда недолго, пару вечеров), так что если есть идеи - я буду очень благодарен, серьезно