将结构数组转换为字符串数组以显示为表格
Posted
技术标签:
【中文标题】将结构数组转换为字符串数组以显示为表格【英文标题】:Transform array of struct into array of strings to display as a table 【发布时间】:2019-08-07 13:12:00 【问题描述】:我在看以下包:https://github.com/olekukonko/tablewriter
我想尝试将我的结构打印为类似的东西,但我无法将我的结构数组转换为包需要的字符串数组。
所以我尝试了类似的方法:
func print(quakes []Quake)
var data [][]string
for _, quake := range quakes
b, err := json.Marshal(quake)
append(data, []string(b))
table := tablewriter.NewWriter(os.Stdout)
table.SetHeader([]string"Name", "Sign", "Rating")
for _, v := range newData
table.Append(v)
table.Render() // Send output
我的地震结构:
type Quake struct
Googlemapref string `json:"googlemapref"`
Segree string `json: "degree"`
DataUpdate string `json: "dataUpdate"`
MagType string `json:"magType"`
ObsRegion string `json: "obsRegion"`
Lon string `json:"lon"`
Source string `json: "source"`
Depth int `json:"depth"`
TensorRef string `json:"tensorRef"`
Sensed string `json:"sensed"`
Shakemapid string `json:"shakemapid"`
Time string `json:"time"`
Lat string `json:"lat"`
Shakemapref string `json:"shakemapref"`
Local string `json:"local"`
Magnitud string `json: "magnitud"`
由于我是语言新手,非常感谢您的帮助,非常感谢
【问题讨论】:
【参考方案1】:您的代码存在一些问题。首先,append
函数没有附加在适当的位置,所以在你执行 append(data, []string(b))
的地方结果被丢弃了,所以我认为你想改为执行 data = append(data, []string(b))
。
此外,在结构上执行json.Marshal
不会生成您尝试使用它的字符串切片。相反,它将生成一个包含所有值的单个字符串,例如"googlemapref":"something","depth":10
。您要使用的表格编写器需要将一部分值放入与标题匹配的表中(您似乎使用"Name", "Sign", "Rating"
的示例标题。
您可以使用reflect
包(如json
)来填充每一行中的字段,但我认为这会比它的价值更复杂,你最好只填写每个通过调用相关字段来行:
func print(quakes []Quake)
var data [][]string
for _, quake := range quakes
row := []stringquake.Googlemapref, quake.Segree, strconv.Itoa(quake.Depth),...
data = append(data, row)
table := tablewriter.NewWriter(os.Stdout)
table.SetHeader([]string"googlemapref", "degree", "depth",...)
for _, v := range newData
table.Append(v)
table.Render() // Send output
(我留下了...
供您自己填写其他字段,但包含深度以显示如何将其转换为字符串)。
【讨论】:
以上是关于将结构数组转换为字符串数组以显示为表格的主要内容,如果未能解决你的问题,请参考以下文章