【发布时间】:2017-07-10 21:17:30
【问题描述】:
我有一块结构体,我想使用https://github.com/google/jsonapi 对其进行编组。
使用单个结构,一切正常。我只是将指针作为第二个参数传递。
package main
import (
"fmt"
"os"
"github.com/google/jsonapi"
)
type Spider struct {
ID int `jsonapi:"primary,spiders"`
EyeCount int `jsonapi:"attr,eye_count"`
}
func main() {
jsonapi.MarshalPayload(os.Stdout, &Spider{ID: 2, EyeCount: 12})
// {"data":{"type":"spiders","id":"2","attributes":{"eye_count":12}}}
}
但是,当我尝试对切片执行相同操作时,情况就大不相同了。
首先,我将切片转换为指向这些结构的指针切片(不知道这里还能做什么,将指针传递给切片不起作用)。
spiders := []Spider{Spider{ID: 1, EyeCount: 8}, Spider{ID: 2, EyeCount: 12}}
var spiderPointers []*Spider
for _, x := range spiders {
spiderPointers = append(spiderPointers, &x)
}
jsonapi.MarshalPayload(os.Stdout, spiderPointers)
它有效。有点。这是问题:
{"data":[
{"type":"spiders","id":"2","attributes":{"eye_count":12}},
{"type":"spiders","id":"2","attributes":{"eye_count":12}}]}
最后一个元素被重复并替换了其他元素。
最后,我想出了一个可行的解决方案:
spiders := []Spider{Spider{ID: 1, EyeCount: 8}, Spider{ID: 2, EyeCount: 12}}
var spiderPointers []interface{}
for _, x := range spiders {
var spider Spider
spider = x
spiderPointers = append(spiderPointers, &spider)
}
jsonapi.MarshalPayload(os.Stdout, spiderPointers)
// {"data":[{"type":"spiders","id":"1","attributes":{"eye_count":8}},
// {"type":"spiders","id":"2","attributes":{"eye_count":12}}]}
但我确信一定有更好的方法,因此提出了这个问题。
【问题讨论】:
-
进一步确认您的工作示例是否合适golang.org/doc/faq#convert_slice_of_interface
标签: go