【问题标题】:OSX 10.10.2 - cmd start undefined showingOSX 10.10.2 - cmd 启动未定义显示
【发布时间】:2015-05-21 06:08:25
【问题描述】:

如何解决? (OSX 10.10.2, go 版本 go1.4.2 darwin/amd64)

错误:

cmd.Start undefined(类型字符串没有Start字段或方法)

代码:

  myos := runtime.GOOS;
  myarch := runtime.GOARCH;
  const url = "http://localhsot:9090"
  if myarch == "386" {
      cmd := exec.Command("open", "-b" , "com.google.Chrome", "--args", "--chrome-frame", "--kiosk", url);
    } else {
      cmd := exec.Command("open", "-b" , "com.google.Chrome", "--args", "--chrome-frame", "--kiosk", url);
    }
    err := cmd.Start();
    if err != nil {
      fmt.Println("failed");
    } 

【问题讨论】:

    标签: macos google-chrome go


    【解决方案1】:

    如果您的 cmd 变量在封闭函数中隐藏了 cmd 参数(在 OP 的问题中不可见),那么 cmd := exec.Command 将声明一个新的 cmd (short variable declaration form) 不会在if/else 范围之外可见。

    OP YumYumYum 确认in the comments

    我有这个:func main() { cmd := "";

    这是一个简短的变量声明,将类型字符串与cmd 相关联。
    这不适用于exec.Command() *exec.Cmd,它返回*exec.Cmd

    如果最好声明一个var cmdopen *exec.Cmd(不同的名称,只是为了安全起见)并实例化它,以确保cmdopen来自预期的类型*exec.Cmd

    var cmdopen *exec.Cmd
    if myarch == "386" {
        cmdopen = exec.Command("open", "-b", "com.google.Chrome", "--args", "--chrome-frame", "--kiosk", url)
    } else {
        cmdopen = exec.Command("open", "-b", "com.google.Chrome", "--args", "--chrome-frame", "--kiosk", url)
    }
    err := cmdopen.Start()
    

    (注意在cmdopen = exec.Command中使用'='而不是':=')

    【讨论】:

    • @YumYumYum 好的,同样的问题。我的回答的第二部分描述了一种完全避免这个问题的方法。
    • @YumYumYum 我坚持我的回答:声明一个正确类型的 单独 变量,然后使用它。
    • 我像你在 OSX 10.10.2 中所说的那样申请了我现在有新错误:“undefined: Cmd” 当我说var cmd *Cmd;
    • @YumYumYum 是的,实际类型是*exec.Cmd (golang.org/pkg/os/exec/#Cmd)。我已经编辑了答案。
    猜你喜欢
    • 1970-01-01
    • 2022-10-24
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 2015-05-05
    相关资源
    最近更新 更多