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

标签 go

我是 Go Lang 的新手。

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

cannot use cmd.Args() (type cli.Args) as type CmdArgs in assignment

错误消息解释说 cmd.Args() (type cli.Args) cannot assignment to type CmdArgs which is type CmdArgs is 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)
}

感谢您的关注。

最佳答案

错误的意思与它所说的完全一样:您试图将函数的返回值分配给与返回值类型不同的变量,这是无效的。当你定义一个新类型时,它就是一个新类型,不能直接赋值。您可以在它们之间转换,但是Go 中没有隐式转换 - 转换必须显式完成:

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

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

关于Go - 不能在赋值中用作类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44887356/

相关文章:

file - 如何使用 golang Rest api 将文件或图像路径 url 返回到 forntend?

go - 无法在 Mac OS X 10.6.7 上编译 Go 语言

go - 在 Go 中生成私钥时使用什么类型的阅读器?

arrays - Golang 定义包含单个字母的字节数组

javascript - 如何使用 websockets 更改模板?

go - nsqjs 客户端,不立即从 go-nsq 服务器端接收消息

当我的主循环等待 channel 滴答和传递事件时,OpenGl 似乎卡住了

path - 找到可执行文件的路径

google-app-engine - 有什么方法可以在 Golang 中处理带有空格的 Google Datastore Kind Property 名称?

go - 请求 token 时获取 nil 而不是 *jwt.Token