func parseFlag()

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
	}
}