可变参数函数,不能传递参数

variadic function, cannot pass parameters

要调用最多需要 3 个按钮的对话框可执行文件,我创建了这个函数:

func Dialog(icon string, text string, buttons ...string) int {
    cmd := &exec.Cmd{
        Path: dialogPath,
        Args: []string{
            dialogPath,
            icon,
            text,
            buttons...,
        },
        Stdout: os.Stdout,
        Stdin:  os.Stdin,
    }
    var waitStatus syscall.WaitStatus
    if err := cmd.Run(); err != nil {
        if exitError, ok := err.(*exec.ExitError); ok {
            waitStatus = exitError.Sys().(syscall.WaitStatus)
            return waitStatus.ExitStatus()
        }
    }
    return 0
}

问题是:这甚至无法编译,因为我不明白如何将按钮传递给 Cmd。我以为打开包装就可以了。

错误是:

syntax error: unexpected ..., expecting comma or }

这是因为语法无效:

    Args: []string{
        dialogPath,
        icon,
        text,
        buttons...,
    },

您只能在函数调用中使用...;您可以使用 append() 解决这个问题:

    Args:   append([]string{dialogPath, icon, text}, buttons...),