英文:
Go - Cannot use as type in assignment
问题
我是你的中文翻译助手,以下是翻译好的内容:
我是Go语言的新手。
我对为什么仍然出现这个错误消息感到困惑。
> cannot use cmd.Args() (type cli.Args) as type CmdArgs in assignment
错误消息解释了cmd.Args() (type cli.Args)
不能赋值给type CmdArgs
,其中type CmdArgs
是cli.Args
类型。
我已经阅读了https://stackoverflow.com/questions/43900806/cannot-use-as-type-in-assignment-in-go,但是它并没有让我理解我的错误在哪里。我认为这与我的问题不同。
请问有什么解决方案吗?
这是我的代码。
package main
import (
"fmt"
"os"
"github.com/urfave/cli"
)
// CmdArgs是命令参数
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)
}
谢谢你的关注。
英文:
I'm new in Go Lang.
I confused why this error message still coming.
> cannot use cmd.Args() (type cli.Args) as type CmdArgs in assignment
The error message explain that cmd.Args() (type cli.Args)
cannot assignment to type CmdArgs
which is type CmdArgs
is cli.Args
.
I have read https://stackoverflow.com/questions/43900806/cannot-use-as-type-in-assignment-in-go, but it does not make me understand where's my wrong is. I think that's a different matter with me.
Any solution please?
Here's my code.
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)
}
Thanks for your attention.
答案1
得分: 1
错误的意思就是它所说的:你试图将函数的返回值赋给一个与返回值类型不同的变量,这是无效的。当你定义一个新类型时,它是一个新类型,不能直接赋值。你可以进行类型转换,但是在Go语言中没有隐式类型转换 - 转换必须显式地进行:
var args CmdArgs
normalArgs := cmd.Args()
args = CmdArgs(normalArgs)
不过我不禁要问你为什么要创建一个名为CmdArgs
的新类型,但我假设在代码示例中没有显示的原因。你可能会发现嵌入类型比起别名更容易一些。
英文:
The error means exactly what it says: you're trying to assign the return value of a function to a variable that's of a different type than the return value, which is invalid. When you define a new type, it's a new type, and not directly assignable. You can cast between them, but there is no implicit casting in Go - the cast must be done explicitly:
var args CmdArgs
normalArgs := cmd.Args()
args = CmdArgs(normalArgs)
Though I have to wonder why you're creating a new type CmdArgs
to begin with, but I assume there's some reason that's not indicated in the code example. You might have an easier time embedding rather than aliasing, however.
答案2
得分: 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)
}
然后它应该可以运行。
英文:
args
is a variable of type CmdArgs
which has a vairable of type cli.Args
Change your function to
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)
}
and it should run.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论