当前位置: 首页 > 知识库问答 >
问题:

如何将接口{}转换为字符串?

百里骏
2023-03-14

我正在使用文档来解析命令行参数。这有效,并生成地图,例如

map[<host>:www.google.de <port>:80 --help:false --version:false]

现在我想将主机端口值连接成一个字符串,两个值之间有一个冒号。基本上,诸如:

host := arguments["<host>"] + ":" + arguments["<port>"]

不幸的是,这不起作用,因为我收到错误消息:

无效操作:参数[“”]“:”(接口{}和字符串类型不匹配)

所以很明显,我需要将从映射中得到的值(它只是<code>接口{}</code>,所以它可以是任何东西)转换为字符串。现在我的问题是,我该怎么做?

共有3个答案

徐峰
2023-03-14

扩展Peter所说的:由于您希望从接口{}转到字符串,类型断言会导致头痛,因为您需要考虑多个传入类型。您必须断言每种可能的类型,并在使用它之前验证它是该类型。

使用fmt。sprintf(https://golang.org/pkg/fmt/#Sprintf)自动处理接口转换。因为您知道您想要的输出类型总是字符串,所以Sprintf将处理接口后面的任何类型,而不需要您编写大量额外的代码

袁鸿雪
2023-03-14

您不需要使用类型断言,只需将< code>%v格式说明符与< code>Sprintf一起使用即可:

hostAndPort := fmt.Sprintf("%v:%v", arguments["<host>"], arguments["<port>"])
劳韬
2023-03-14

您需要添加类型断言< code >。(字符串)。这是必要的,因为映射属于< code > map[string]interface { } 类型:

host := arguments["<host>"].(string) + ":" + arguments["<port>"].(string)

最新版本的 Docopt 返回具有转换方法的 Opts 对象:

host, err := arguments.String("<host>")
port, err := arguments.String("<port>")
host_port := host + ":" + port
 类似资料:
  • 问题内容: 我正在编写一些代码,并且我需要它来捕获参数并将它们传递给 我(我想要它的默认行为,编写由空格分隔并后跟换行符的参数)。但是它需要而返回。 这是代码示例: 这将返回以下错误: 这是一个错误吗?不应该接受 任何 数组吗?顺便说一句,我也尝试这样做: 但出现以下错误: 有“解决方案”解决方法吗? 问题答案: 这不是错误。需要一个类型。这意味着它必须是值的切片,而不是“任何切片”。为了转换切片

  • 问题内容: 我正在使用github.com/fatih/structs包将struct的所有字段的值转换为函数。看这里。这工作正常,但最终我想通过使用csv包将值写入csv文件。该功能需要作为输入。 简而言之:我如何轻松地将的输出转换为字符串数组? 问题答案: 即使所有值都是具体类型,也不能简单地转换为,因为这两种类型具有不同的内存布局/表示形式。 您必须定义如何用值表示不同类型的值。 最简单和明

  • 问题内容: 我有一个,我需要一个。如何从一个转换为另一个? 问题答案: 好问题。我有以下五种 6种方法可以做到这一点。 注意:返回。因此有效地两者是相同的。 调用,这又设置了数组。 另一方面,调用以下程序包私有构造函数。 从源代码中的Java 8的源代码 因此似乎是最有效的方法,在这两个存储器和速度方面,用于转换char到String。

  • 问题内容: 如何将字符串转换为long。 为了你 所以你怎么走却又漫长。 问题答案: 这是一种常用的方法: 还有一种方法:区别在于返回原语而返回对象。

  • 问题内容: 如何在Java中转换String为CharSequence? 问题答案: 从 IS-A开始,您可以在需要的地方传递,也可以将分配给: 如果要将a转换为,则使用必须由的每个具体实现实现的方法。 希望能帮助到你。

  • 问题内容: 我正在尝试从标准输入中读取一些非常大的数字,并将它们加在一起。 但是,要添加到BigInteger,我需要使用: 效果很好,但是由于唯一需要加上,所以我不能添加大于的最大值(9223372036854775807)的数字。 每当我尝试添加9223372036854775808或更多时,都会得到NumberFormatException(这是完全可以预期的)。 有类似的东西吗? 问题答案