나는 기능이 func more(... t)
있습니다. 슬라이스를 사용하여 인수 목록을 채울 수 있는지 궁금합니다 ...
.
다음 프로그램을 해결하려고합니다. 기본적으로 명령을 문자열로받는 일반 셸을 모방합니다.
명령 함수에는 인수의 “목록”이 필요하며 문자열을 이러한 목록으로 변환하는 방법을 알 수 없습니다.
import "os/exec"
import "strings"
func main(){
plainCommand := "echo hello world"
sliceA := strings.Fields(plainCommand)
cmd := exec.Command(sliceA)
}
답변
f가 최종 매개 변수 유형 … T로 가변적이면 함수 내에서 인수는 [] T 유형의 매개 변수와 동일합니다. f를 호출 할 때마다 최종 매개 변수에 전달되는 인수는 연속 요소가 실제 인수 인 [] T 유형의 새 슬라이스이며, 모두 T 유형에 할당 할 수 있어야합니다. 따라서 슬라이스의 길이는 인수는 최종 매개 변수에 바인딩되며 호출 사이트마다 다를 수 있습니다.
func Command(name string, arg ...string) *Cmd
명령은 지정된 인수로 명명 된 프로그램을 실행하기 위해 Cmd 구조체를 반환합니다.
반환 된 Cmd의 Args 필드는 명령 이름 뒤에 arg 요소가 오는 것으로 구성되므로 arg는 명령 이름 자체를 포함하지 않아야합니다. 예 : Command ( “echo”, “hello”)
예를 들면
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))
}
산출:
hello world
답변
명령 인수 목록은 플래그 패키지 Args()
함수 에서 검색 할 수 있습니다 . 그런 다음 가변 입력 스타일 ( func(input...)
)을 사용하여이를 함수에 전달할 수 있습니다.
에서 스펙 :
f가 최종 매개 변수 유형 … T로 가변적이면 함수 내에서 인수는 [] T 유형의 매개 변수와 동일합니다. f를 호출 할 때마다 최종 매개 변수에 전달 된 인수는 연속 요소가 실제 인수 인 [] T 유형의 새 슬라이스이며, 모두 T 유형에 할당 할 수 있어야합니다.
예:
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
}
자세한 내용 은 Go 사양 을 참조하세요.
답변
func Command(name string, arg ...string) *Cmd
명령은 지정된 인수로 명명 된 프로그램을 실행하기 위해 Cmd 구조체를 반환합니다.
따라서에서 찾은 명령을 추출한 sliceA[0]
다음 모든 인수를 가변으로 전달하지만 명령을 제거해야합니다 sliceA[1:]...
.
import "os/exec"
import "strings"
func main(){
plainCommand := "echo hello world"
sliceA := strings.Fields(plainCommand)
cmd := exec.Command(sliceA[0], sliceA[1:]...)
}