Bir dilimi değişken girdi olarak nasıl geçirebilirim?


89

Benim bir işlevim var func more(... t). Bir argüman listesini doldurmak için bir dilim kullanmanın mümkün olup olmadığını merak ediyorum ....

Aşağıdaki programı çözmeye çalışıyorum. Temel olarak komutu bir dizge olarak alan normal bir kabuğu taklit etmek için. Komut işlevi bir argüman "listesi" gerektiriyor ve bir dizeyi böyle bir listeye nasıl dönüştürebileceğimi anlamıyorum

    import "os/exec"
    import "strings"
    func main(){
        plainCommand  := "echo hello world"
        sliceA := strings.Fields(plainCommand)
        cmd := exec.Command(sliceA)
    }

Yanıtlar:


103

Go Programlama Dili Spesifikasyonu

Parametrelere argümanlar iletiliyor

F, son parametre türü ... T ile değişkense, fonksiyon içinde bağımsız değişken [] T tipi bir parametreye eşdeğerdir. Her f çağrısında, son parametreye iletilen argüman [] T türünün yeni bir dilimidir ve bunların ardışık öğeleri gerçek argümanlardır ve bunların tümü T tipine atanabilir olmalıdır. Dilimin uzunluğu bu nedenle sayısıdır argümanlar son parametreye bağlıdır ve her arama sitesi için farklı olabilir.


Paket yürütme

func Komutu

func Command(name string, arg ...string) *Cmd

Komut, adlandırılmış programı verilen argümanlarla çalıştırmak için Cmd yapısını döndürür.

Döndürülen Cmd'nin Args alanı komut adından sonra arg'nin öğelerinden oluşturulur, bu nedenle arg, komut adının kendisini içermemelidir. Örneğin, Komut ("echo", "merhaba")


Örneğin,

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    name := "echo"
    args := []string{"hello", "world"}
    cmd := exec.Command(name, args...)
    out, err := cmd.Output()
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(out))
}

Çıktı:

hello world

11

Bayrak paketi Args()işlevinden komut bağımsız değişkenlerinin bir listesi alınabilir . Daha sonra bunu variadic input stilini ( func(input...)) kullanarak bir işleve geçirebilirsiniz.

Gönderen Spec :

F, son parametre türü ... T ile değişkense, fonksiyon içinde bağımsız değişken [] T tipi bir parametreye eşdeğerdir. Her f çağrısında, son parametreye iletilen argüman [] T türünün yeni bir dilimidir ve bunların ardışık öğeleri gerçek argümanlardır ve bunların tümü T tipine atanabilir olmalıdır.

Misal:

package main

import "fmt"

func echo(strings ...string) {
    for _, s := range strings {
        fmt.Println(s)
    }
}

func main() {
    strings := []string{"a", "b", "c"}
    echo(strings...) // Treat input to function as variadic
}

Daha fazla ayrıntı için Go spesifikasyonuna bakın.

Oyun alanı


6

func Komutu

func Command(name string, arg ...string) *Cmd

Komut, adlandırılmış programı verilen argümanlarla çalıştırmak için Cmd yapısını döndürür.

Dolayısıyla, içinde bulunan komutu çıkarmanız sliceA[0]ve ardından tüm argümanları bir değişkenle ancak komutu kaldırarak iletmeniz gerekir sliceA[1:]....

import "os/exec"
import "strings"
func main(){
    plainCommand  := "echo hello world"
    sliceA := strings.Fields(plainCommand)
    cmd := exec.Command(sliceA[0], sliceA[1:]...)
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.