可变参数函数,不能传递参数
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...),
要调用最多需要 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...),