我是Go Lang的新手。

我很困惑为什么此错误消息仍然出现。



错误消息说明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)
}

感谢您的关注。

最佳答案

该错误确切说明了其含义:您正在尝试将函数的返回值分配给与返回值不同类型的变量,该变量是无效的。定义新类型时,它是新类型,不能直接分配。您可以在它们之间进行强制转换,但是Go中没有隐式强制转换-必须显式进行强制转换:

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

虽然我想知道为什么要创建一个新的CmdArgs类型,但是我认为代码示例中没有指出某些原因。但是,嵌入时间可能比使用别名更容易。

10-06 14:21