回答

收藏

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

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

我有一个功能func more(... t)。我想知道是否可以用切片填写参数列表...。
0 B! @3 w8 y0 b  P$ d' L5 j我正在尝试解决以下程序。基本上是模仿一个普通的shell,它以字符串的形式接收命令。命令函数需要一个参数列表
' E  J$ i' j  Z7 O; _

    ' \: U  h4 b3 I" j5 g4 \
  •     import "os/exec"    import "strings"    func main()()(()()()()(                      )plainCommand  := "echo hello world"        sliceA := strings.Fields(plainCommand)        cmd := exec.Command(sliceA)   code]               
    9 K8 x3 Y" u& e! Y5 V/ j" h
  •     解决方案:                                                               
    9 K- i: c* P/ u
  •                                                                 如果 f 是具有最终参数类型 …T 可变参数在函数中等于 []T 参数。每次调用 f 时,传递给最后一个参数的参数是 []T 型新切片的连续元素为实际参数,所有参数必须分配给型 T。因此,切片的长度是绑定到最后一个参数的参数,每个调用站可能会有所不同。
    # L# B5 k8 O+ z! ]
  • 包执行
    % P+ S# B) N; j) ^
  • func 命令
    ) n9 m* p2 q2 x7 x" C
  • golangfunc Command(name string,arg ...string) *Cmd
    0 r) B7 C! x8 a/ Q& v- L
  • Command 返回 Cmd 结构使用给定的参数执行命名程序。) K4 `+ T& e* T& t7 L, v+ O
  • 返回的 Cmd 的 Args 字段命令名称后跟随 arg因此 的元素构成arg 不应包含命令名称本身。Command(“echo”,“hello”)$ x6 M1 D' Q: }9 T3 J
  • 例如,[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 P, h( e3 m$ G0 q: Q
输出:2 E4 R  O  X* x1 a3 N* w! J3 ^
    hello world
    . v* B- l/ p: F4 [& c
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则