登录
首页 >  Golang >  Go问答

在 Golang 中将 []interface 转换为 []string

来源:Golang技术栈

时间:2023-04-12 14:09:43 264浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《在 Golang 中将 []interface 转换为 []string》,这篇文章主要会讲到golang等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

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

简而言之:我怎样才能轻松地将输出转换toValues()为字符串数组?

正确答案

即使所有值都是具体类型,您也不能简单地转换[]interface{}为,因为这两种类型具有不同的内存布局/表示。有关详细信息,请参阅[无法将 []string 转换为 []interface {}](https://stackoverflow.com/questions/12990338/cannot-convert-string-to- interface)。[]string``string[](https://stackoverflow.com/questions/12990338/cannot- convert-string-to-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}"]

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>