Начиная с Go версии 1.13, пакет errors
включает в себя понятие "обертывания" ошибок. Процедура, возвращающая «завернутую» ошибку, вызывает fmt.Errorf
, используя глагол %w
в формате, чтобы превратить внутреннюю ошибку во внешнюю ошибку. Затем можно проверить внешнюю ошибку, чтобы определить, содержит ли она конкретную внутреннюю ошибку.
До этого xerrors
обеспечивали одинаковую общую концепцию.
Оба из они требуют, чтобы тот, кто выдавал значение ошибки, использовал предоставленный интерфейс переноса. Подпрограмма, о которой вы спрашиваете - часть https://godoc.org/golang.org/x/crypto/ssh - не делает этого. Некоторый старый код, который не переносит ошибки, предоставляет определенные функции тестирования ошибок. Например, когда os.Open
возвращает ошибку, os.IsNotExist
сообщит вам, если это ошибка, потому что файл не существует.
К сожалению, этот конкретный пакет такого теста нет, поэтому вы в значительной степени застряли на том, что предложили (прямая проверка строки), если вы действительно хотите программно узнать, что эта ошибка произошла из этого конкретного источника.