当前位置: 首页 > 面试题库 >

无法将[]字符串转换为[]接口{}

壤驷鸿
2023-03-14
问题内容

我正在编写一些代码,并且我需要它来捕获参数并将它们传递给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接受 任何 数组吗?顺便说一句,我也尝试这样做:

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

但出现以下错误:

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

有“解决方案”解决方法吗?


问题答案:

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

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

您无法使用任何分片的原因是,a []string和a
之间的转换[]interface{}需要更改内存布局,并且发生时间为O(n)。将类型转换为interface{}需要O(1)时间。如果他们不需要此for循环,则编译器仍将需要插入它。



 类似资料:
  • 问题内容: 您如何将此String转换为gson.JsonArray? 这是我的代码: 这是将这个Collections字符串转换为JSonArray的方法吗? 问题答案: 要在JSON数组中包含字符串值,必须记住在Java程序中用反斜杠转义双引号。请参见下面的声明。 您在main()方法中的代码可以正常工作。以下只是对main()方法中的代码的微小修改。 最后,请记住在语句“ com.googl

  • 我将XML作为字符串传递给一个方法,并再次将其转换为XML来完成我的工作。 其正常工作正常,但当出现特殊字符时,如<代码> 我的XML字符串: 我的代码是: 错误: “=”是意外标记。预期标记为“;”。第1行,位置150。 完全错误为: 系统Xml。XmlException未由用户代码处理HResult=-2146232000消息=“=”是意外令牌。预期标记为“;”。第1行,位置150。源=系统。

  • 问题内容: 我正在运行以下python脚本: 但是我得到了类似的错误: 我对此感到困惑。当我在交互式部分中仅尝试一行时,而不是使用脚本进行for循环时: 它运作良好。 有人可以解释一下吗?谢谢。 问题答案: 显然,您的某些行没有有效的float数据,特别是某些行的文本无法转换为float。 当您在交互式提示中尝试它时,您仅尝试第一行,因此最好的方法是在出现此错误的地方打印行,您将知道错误的行,例如

  • 问题内容: 我从Met Office Datapoint API读取JSON时遇到NSJSONSerialization问题。 我收到以下错误 我已经检查并认为这是根据字符位置的冒犯行 根据我尝试过的多个验证器,JSON本身似乎是有效的,并且我希望它也来自大型组织(如Met Office)。 NSJSONSerialization是否不能与’ó’之类的字符配合使用? 如果不是,我该如何更改编码类型

  • 我在尝试使用nokogiri运行rake任务时遇到这个错误。 编辑:顶部表架构

  • 我正在使用文档来解析命令行参数。这有效,并生成地图,例如 现在我想将和值连接成一个字符串,两个值之间有一个冒号。基本上,诸如: 不幸的是,这不起作用,因为我收到错误消息: 无效操作:参数[“”]“:”(接口{}和字符串类型不匹配) 所以很明显,我需要将从映射中得到的值(它只是<code>接口{}</code>,所以它可以是任何东西)转换为字符串。现在我的问题是,我该怎么做?