Maison >développement back-end >Golang >Comment exécuter efficacement des commandes système avec des arguments variables dans Go ?
Résoudre l'exécution de commandes système avec des arguments variables
Dans de nombreux scénarios, il est courant de rencontrer des commandes système qui nécessitent un nombre variable d'arguments. Cependant, l'exécution de telles commandes dans un script simple peut poser un défi lorsque l'on tente d'exécuter des commandes au-delà des commandes de base à un seul mot.
Dans un exemple de script Go présenté précédemment, les tentatives d'exécution de commandes telles que echo newline >> foo.o a généré des erreurs, indiquant que le script n'a pas réussi à reconnaître les commandes. Cela est probablement dû à un manque de séparation entre la commande et ses arguments dans le processus d'exécution.
Subversion du problème à l'aide de "sh"
Une solution trouvée pour contourner cette limitation implique l'utilisation de la commande sh (shell) :
out, err := exec.Command("sh", "-c", cmd).Output()
Une méthode simplifiée et efficace Approche
Une meilleure alternative qui exploite la prise en charge des arguments variadiques de Go est la suivante :
func exeCmd(cmd string, wg *sync.WaitGroup) { // Split command into head and parts parts := strings.Fields(cmd) head := parts[0] parts = parts[1:len(parts)] out, err := exec.Command(head, parts...).Output() if err != nil { fmt.Printf("%s", err) } fmt.Printf("%s", out) }
Cette solution tire parti des arguments variadiques de Go, vous permettant de transmettre un nombre variable de arguments à la commande. La variable head représente la commande elle-même, tandis que parts contient le reste des arguments. En utilisant des arguments variadiques, le besoin de commandes externes telles que sh est éliminé, ce qui se traduit par un processus d'exécution plus efficace et plus simple.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!