It looks like MyFlag.Name
this field is not actually defined as a flag.
To define it as a flag, you need do this: fs.String(MyFlag.Name, "5000", "usageOfTheFlag")
After this you can use fs.Set
for MyFlag.Name
.
var MyFlag = flag.Flag{
Name: "TestFlag",
}
func MyTest() {
fs := flag.NewFlagSet("", flag.ExitOnError)
app := cli.NewApp()
// define a flag with default value
fs.String(MyFlag.Name, "5000", "usageOfTheFlag")
// set a new value
err := fs.Set(MyFlag.Name, "5000")
if err != nil {
fmt.Println(err)
return
}
ctx := cli.NewContext(app, fs, nil)
runApp(ctx)
}
func runApp(ctx *cli.Context) {
cache := ctx.GlobalInt(MyFlag.Name)
.... // do more stuff
}
如果您要使用您的标志名在fs.Set
上执行错误判断,而不将其定义为标志:
// fs.String(MyFlag.Name, "5000", "usageOfTheFlag")
err := fs.Set(MyFlag.Name, "5000")
if err != nil {
fmt.Println(err)
return
}
如果标志的名称当前未定义为标志,则会出现此错误.
在本例中为"TestFlag"
:
no such flag -TestFlag
因此,MyFlag.Name
没有获得新值,因此您的程序没有看到您的新值.