Осуждение
Поддерживаемый способ маркировки функций как устаревших выглядит примерно так:
type MyStruct struct {
}
// MyFunc returns hello
// Deprecated: Use YourFunc
func (m MyStruct) MyFunc() string {
return "hello"
}
Современные IDE будут выделять любое использование этой функции, а линтеры также могут вызывать предупреждения (я лично не проверял это).
Принимайте интерфейсы. Возвращаемые структуры.
Популярная лучшая практика - "Принимать интерфейсы. Возвращаемые структуры". - что, как правило, поощряет НАДЕЖНЫЙ дизайн в программном обеспечении.
Однако следующий код, который следует этой наилучшей практике, скрывает предупреждение об устаревании:
// MyInterface specifies a single function that we require from a dependency
type MyInterface interface {
MyFunc() string
}
func main() {
var v MyInterface
v = MyStruct{}
v.MyFunc()
}
Вопрос
Есть ли решение этой проблемы?
Если бы я был, например, сопровождающим библиотеки: как я могу гарантировать, что мои предупреждения об устаревании будут видны пользователям библиотеки, которые также следуют рекомендациям и определяют свои собственные интерфейсы зависимостей.