回答

收藏

如何将切片作为可变参数输入传递?

技术问答 技术问答 264 人阅读 | 0 人回复 | 2023-09-12

我有一个功能func more(... t)。我想知道是否可以用切片填写参数列表...。+ [0 @. w5 S3 W% _  E5 s3 V3 K2 ]# L
我正在尝试解决以下程序。基本上是模仿一个普通的shell,它以字符串的形式接收命令。命令函数需要一个参数列表, |; Q- z; e; n/ f
    1 G) |2 }8 `+ N; S. a1 d' w
  •     import "os/exec"    import "strings"    func main()()(()()()()(                      )plainCommand  := "echo hello world"        sliceA := strings.Fields(plainCommand)        cmd := exec.Command(sliceA)   code]               : R# R  @% R% _8 w
  •     解决方案:                                                               
    $ \+ D" y- J* r1 D4 |, ~! J% q) ~
  •                                                                 如果 f 是具有最终参数类型 …T 可变参数在函数中等于 []T 参数。每次调用 f 时,传递给最后一个参数的参数是 []T 型新切片的连续元素为实际参数,所有参数必须分配给型 T。因此,切片的长度是绑定到最后一个参数的参数,每个调用站可能会有所不同。
    : _( r- n5 l+ |- |5 O
  • 包执行( D; _- Q7 a* o7 A$ _
  • func 命令
    . |- Y& P& Y! t7 n, n7 d% d
  • golangfunc Command(name string,arg ...string) *Cmd
    * w: t% K1 z1 E, n7 Y
  • Command 返回 Cmd 结构使用给定的参数执行命名程序。: y! h) P9 L; _& }& g( r5 h5 p
  • 返回的 Cmd 的 Args 字段命令名称后跟随 arg因此 的元素构成arg 不应包含命令名称本身。Command(“echo”,“hello”)
    , {+ r3 w( Z$ {
  • 例如,[code]package mainimport  "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))}
    1 o/ n& F2 m6 U' v7 W4 T8 ?
输出:
% s  m, F+ g& `: y8 t" G
    hello world3 C' p6 a' x7 O' n3 v
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则