type-conversion - 无法将 [] 字符串转换为 [] 接口(interface) {}

标签 type-conversion go

我正在编写一些代码,我需要它来捕获参数并将它们传递给 fmt.Println
(我想要它的默认行为,编写由空格分隔并后跟换行符的参数)。但是它需要 []interface {}flag.Args() 返回一个 []string
下面是代码示例:

package main

import (
    "fmt"
    "flag"
)

func main() {
    flag.Parse()
    fmt.Println(flag.Args()...)
}

这会返回以下错误:

./example.go:10: cannot use args (type []string) as type []interface {} in function argument

这是一个错误吗? fmt.Println 不应该采用 any 数组吗?顺便说一句,我也尝试过这样做:

var args = []interface{}(flag.Args())

但我收到以下错误:

cannot convert flag.Args() (type []string) to type []interface {}

是否有解决此问题的“Go”方式?

最佳答案

这不是错误。 fmt.Println() 需要 []interface{} 类型。这意味着,它必须是 interface{} 值的 slice ,而不是“任何 slice ”。为了转换 slice ,您需要循环并复制每个元素。

old := flag.Args()
new := make([]interface{}, len(old))
for i, v := range old {
    new[i] = v
}
fmt.Println(new...)

您不能使用任何 slice 的原因是 []string[]interface{} 之间的转换需要更改内存布局并发生在 O(n) 时间内。将类型转换为 interface{} 需要 O(1) 时间。如果他们不需要这个 for 循环,编译器仍然需要插入它。

关于type-conversion - 无法将 [] 字符串转换为 [] 接口(interface) {},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12990338/

相关文章:

go - 如何在 Go 中从 system-d 服务运行时修复环境变量不起作用

scala - 如何将任何数字转换为长整数

c++ - 指点功课

amazon-web-services - 如何将本地主机设置为主题订阅的端点 - Amazon sns 服务

function - 了解 Golang 中的接口(interface)

http - 将数据传递给嵌套模板未按预期工作

python - 替换 Pandas 中的列值

asp.net - '/' 应用程序中的服务器错误无法将字符值转换为金钱

polymorphism - SML中不使用数据类型的多态加法函数

unit-testing - 如何在 Go 中为结构编写模拟