Go - 不能在赋值中用作类型

时间:2017-07-03 13:52:54

标签: go

我是Go Lang的新人。

我很困惑为什么这个错误信息仍然存在。

  

不能在赋值中使用cmd.Args()(类型cli.Args)作为类型CmdArgs

错误消息说明cmd.Args() (type cli.Args)无法分配到type CmdArgstype CmdArgscli.Args

我已阅读Cannot use as type in assignment in go,但这并不能让我明白我的错在哪里。我认为这与我不同。

有任何解决方案吗?

这是我的代码。

package main

import (
    "fmt"
    "os"

    "github.com/urfave/cli"
)

// CmdArgs is command arguments
type CmdArgs cli.Args

func main() {
    program := cli.NewApp()
    program.Action = func(cmd *cli.Context) error {
        var args CmdArgs
        args = cmd.Args()
               ▼▼▼▼▼▼▼▼▼
               cannot use cmd.Args() (type cli.Args) as type CmdArgs in assignment

        return nil
    }

    program.Run(os.Args)
}

感谢您的关注。

2 个答案:

答案 0 :(得分:2)

错误意味着它所说的内容:您正在尝试将函数的返回值分配给与返回值不同的变量,该变量无效。定义新类型时,它是一种新类型,不能直接分配。你可以在它们之间施放,但是在中没有没有隐式转换 - 必须显式地执行

    var args CmdArgs
    normalArgs := cmd.Args()
    args = CmdArgs(normalArgs)

虽然我不得不想知道你为什么要开始创建一个新类型CmdArgs,但我认为有一些原因在代码示例中没有说明。但是,您可能更容易嵌入而不是别名。

答案 1 :(得分:1)

argsCmdArgs类型的变量,其类型为cli.Args

将您的功能更改为

package main

import (
    "fmt"
    "os"

    "github.com/urfave/cli"
)

func main() {
    program := cli.NewApp()
    program.Action = func(cmd *cli.Context) error {
        args := cmd.Args()
        return nil
    }

    program.Run(os.Args)
}

它应该运行。