Wpis z mikrobloga

#golang

Czy mogę w jakiś sposób rozpakować bar na wzór pythonowego *args?

func foo(bar ...string) {
  out, err := exec.Output(bar)
}
  • 14
  • Odpowiedz
@Saly: rzuca mi to errory:

./main.go:10:20: not enough arguments in call to exec.Command
        have ([]string...)
        want (string, ...string)
  • Odpowiedz
@zwei: to jest błąd. Musisz przekazać jeden wymagany argument, reszta jest opcjonalna. Nie możesz zrobić bar..., bo co w przypadku, gdy bar jest pustym packiem?
  • Odpowiedz
@Saly:

func measure(args ...string)
        cmd := exec.Command(cmd...)
        cmd.Run()
}

func main() {
        measure("python3", "-c", "print('hello')")
}

@Kajetan8: tak jak wspomniałem - to nie działa.
  • Odpowiedz
@zwei: tak jak pisalem, jeden argument jest wymagany, pack (który tak na prawdę pod spodem to slice) niekoniecznie zawiera jeden element
  • Odpowiedz
Tylko trzeba sprawdzić długość args func measure(args ...string){ cmd := exec.Command(args[0], args[1:]...) cmd.Run() } func main() { measure("python3", "-c", "print('hello')") }
  • Odpowiedz