func ParseFlags()

in tools/go-agent/tools/flags.go [29:57]


func ParseFlags(result interface{}, args []string) (noOpIndex int, err error) {
	if len(args) == 0 {
		return 0, fmt.Errorf("no args")
	}
	flags := parseFlagsFromStruct(result)
	if len(flags) == 0 {
		return 0, nil
	}

	i := 0
	firstNonOptionIndex := -1
	for i < len(args)-1 {
		shift, isOption := parseFlag(flags, args[i], args[i+1])
		if !isOption && firstNonOptionIndex == -1 {
			firstNonOptionIndex = i
		}
		i += shift
	}

	if i < len(args) {
		parseFlag(flags, args[i], "")
	}

	// process the all args flag
	if v, exist := flags["all-args"]; exist {
		v.Set(reflect.ValueOf(args))
	}
	return firstNonOptionIndex, nil
}