回答

收藏

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

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

我有一个功能func more(... t)。我想知道是否可以用切片填写参数列表...。
3 O1 S/ q: k: `我正在尝试解决以下程序。基本上是模仿一个普通的shell,它以字符串的形式接收命令。命令函数需要一个参数列表
" z8 }: [3 [/ ^

    + m7 d3 [. g# A  K
  •     import "os/exec"    import "strings"    func main()()(()()()()(                      )plainCommand  := "echo hello world"        sliceA := strings.Fields(plainCommand)        cmd := exec.Command(sliceA)   code]               " @# L( W. v( ^! @
  •     解决方案:                                                               
    5 Y: |, {! P7 ^+ K! H# A, ~
  •                                                                 如果 f 是具有最终参数类型 …T 可变参数在函数中等于 []T 参数。每次调用 f 时,传递给最后一个参数的参数是 []T 型新切片的连续元素为实际参数,所有参数必须分配给型 T。因此,切片的长度是绑定到最后一个参数的参数,每个调用站可能会有所不同。0 }8 i2 I5 |! `! w6 ^3 E
  • 包执行
    2 P. k$ O( u6 p2 h: D
  • func 命令
    ' m; D' J! ?0 s2 c2 M" O
  • golangfunc Command(name string,arg ...string) *Cmd% U6 y& p9 J" h0 L& v2 `0 z
  • Command 返回 Cmd 结构使用给定的参数执行命名程序。# _" h5 t( \! x  v
  • 返回的 Cmd 的 Args 字段命令名称后跟随 arg因此 的元素构成arg 不应包含命令名称本身。Command(“echo”,“hello”)
    4 i' C5 j  p% G, x, m$ ]& A1 P- s
  • 例如,[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))}
    " `  ?$ V  j1 k0 ^. F9 y9 u8 X
输出:
. G! U& r' V$ o) k1 w9 @: U6 G  w5 }
    hello world* I$ _' x4 j( C0 Y
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则