package flag func isShort(e string) bool { re := []rune(e) return e != "--" && len(re) == 2 && re[0] == '-' } func isLong(e string) bool { return len(e) > 2 && e[:2] == "--" } func isCombined(e string) bool { re := []rune(e) return len(re) > 2 && re[0] != '-' } func isUnixFlag(e string) bool { return isShort(e) || isLong(e) } func formatArg(e string) []string { if isCombined(e) { var out []string for _, r := range e[1:] { out = append(out, string([]rune{'-', r})) } return out } return []string{e} } func formatArgs(args []string) []string { var ( out []string ignore bool ) for _, e := range args { if ignore { out = append(out, e) } else { ignore = e == "--" out = append(out, formatArg(e)...) } } return out } func containsUnixFlag(args []string) bool { for _, arg := range args { if isUnixFlag(arg) { return true } } return false }