in tools/go-agent/tools/flags.go [71:99]
func parseFlag(flags map[string]reflect.Value, curArg, nextArg string) (shift int, isOption bool) {
if curArg[0] != '-' {
return 1, false
}
kv := strings.SplitN(curArg, "=", 2)
option := kv[0]
if v, exist := flags[option]; !exist {
if len(kv) == 2 {
return 1, true
} else if nextArg == "" || (len(nextArg) > 1 && nextArg[0] != '-') {
return 2, true
}
return 1, true
} else if len(kv) == 2 {
v.SetString(kv[1])
return 1, true
} else {
switch v.Kind() {
case reflect.String:
v.SetString(nextArg)
return 2, true
case reflect.Bool:
v.SetBool(true)
return 1, true
}
return 1, true
}
}