Ответ 1
flag.Parse()
вызывается до того, как будет определен ваш флаг.
Вы должны убедиться, что все определения флагов происходят до вызова flag.Parse()
, как правило, путем определения всех флагов внутри функций init()
.
Привет, я использую флаг при тестировании в go:
file_test.go
var ip = flag.String("ip", "noip", "test")
Я использую это только в одном тестовом файле. И он отлично работает, когда тестирует только один тестовый файл, но когда я запускаю:
go test ./... -ip 127.0.0.1
alle другого тестового файла: flag provided but not defined
.
Вы видели это?
Привет
flag.Parse()
вызывается до того, как будет определен ваш флаг.
Вы должны убедиться, что все определения флагов происходят до вызова flag.Parse()
, как правило, путем определения всех флагов внутри функций init()
.
Если вы перешли на Голанг 13, он изменил порядок инициализации теста, так что это может привести к чему-то вроде
flag provided but not defined: -test.timeout
в качестве возможного обходного пути, вы можете использовать
var _ = func() bool {
testing.Init()
return true
}()
это вызвало бы инициализацию теста перед приложением. Более подробную информацию можно найти в оригинальной теме:
https://github.com/golang/go/issues/31859#issuecomment-489889428