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

在Golang中将[]接口转换为[]字符串

廉元龙
2023-03-14
问题内容

我正在使用github.com/fatih/structs包将struct的所有字段的值转换[]interface{}toValues()函数。看这里。这工作正常,但最终我想通过使用csv包将值写入csv文件。该csv.Write()功能需要[]string作为输入。

简而言之:我如何轻松地将的输出转换toValues()为字符串数组?


问题答案:

即使所有值都是具体类型,也不能简单地转换[]interface{}为,因为这两种类型具有不同的内存布局/表示形式。

您必须定义如何用string值表示不同类型的值。

最简单和明智的方法是遍历值,并使用它们fmt.Sprint()来获取string每个值的表示形式,例如:

t := []interface{}{
    "zero",
    1, 2.0, 3.14,
    []int{4, 5},
    struct{ X, Y int }{6, 7},
}
fmt.Println(t)

s := make([]string, len(t))
for i, v := range t {
    s[i] = fmt.Sprint(v)
}
fmt.Println(s)
fmt.Printf("%q\n", s)

输出(在Go Playground上尝试):

[zero 1 2 3.14 [4 5] {6 7}]
[zero 1 2 3.14 [4 5] {6 7}]
["zero" "1" "2" "3.14" "[4 5]" "{6 7}"]


 类似资料:
  • 问题内容: 我想在下面的代码中改进getCustomerFromDTO方法,我需要从interface {}创建一个结构,目前我需要将该接口编组为byte [],然后将数组解组为我的结构-必须有更好的方法。 我的用例是,我通过rabbitmq发送结构,然后使用具有其他特定于域的数据的通用DTO包装器来发送它们。当我从Rabbit MQ接收DTO时,消息下方的一层将被封送给我的DTO,然后我需要从该

  • 问题内容: 我需要在Golang中将转换为。是否有可能转换到在Golang无须转换为或第一? 需要一个。需要一个。 问题答案: 一线的答案是。 无论如何,甚至在标准库函数(例如)内部都有很多转换,因此您有一些选择(尝试使用Go Playground ): 1-您可以编写转换函数( 最快 ): 2-您可以使用 ( 慢 ) 参见内部: 3-您可以使用 ( 快速 ) 参见内部: 4-您可以使用( 更快

  • 问题内容: 我正在尝试找到转换的最佳方法 键入字符串。我尝试使用marshall转换为json以保留格式,然后转换回字符串,但这未成功。更具体地说,我正在尝试将包含键和值的映射转换为字符串以容纳https://www.nomadproject.io/docs/job- specification/template.html#environment-variables https://github.

  • 我想将字符串转换为int64。我从<code>strconv ParseInt实际上返回一个int64: 所以如果我想从一个字符串中获取一个int64,我应该避免使用Atoi,而是使用ParseInt吗?还是有Atio64藏在某个地方?

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

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