我是Go Lang的新人。
我很困惑为什么这个错误信息仍然存在。
不能在赋值中使用cmd.Args()(类型cli.Args)作为类型CmdArgs
错误消息说明cmd.Args() (type cli.Args)
无法分配到type CmdArgs
,type CmdArgs
为cli.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)
}
感谢您的关注。
答案 0 :(得分:2)
错误意味着它所说的内容:您正在尝试将函数的返回值分配给与返回值不同的变量,该变量无效。定义新类型时,它是一种新类型,不能直接分配。你可以在它们之间施放,但是在中没有没有隐式转换 - 必须显式地执行 :
var args CmdArgs
normalArgs := cmd.Args()
args = CmdArgs(normalArgs)
虽然我不得不想知道你为什么要开始创建一个新类型CmdArgs
,但我认为有一些原因在代码示例中没有说明。但是,您可能更容易嵌入而不是别名。
答案 1 :(得分:1)
args
是CmdArgs
类型的变量,其类型为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)
}
它应该运行。