为了账号安全,请及时绑定邮箱和手机立即绑定

将一个字符串连接到一个结构片段

将一个字符串连接到一个结构片段

Go
尚方宝剑之说 2023-04-24 17:04:13
我正在尝试创建一个端点 Go API 以供前端 JavaScript 图形库使用。应该发生什么:/data 端点以获取 JSON 数据数组。数据只是一片 go 结构,在这个例子中只有两个,但它将超过 10000。图形库需要额外的元数据。它被保存为一个名为 AdditionalInfo 的变量。问题是当我想对 AdditionalInfo + AllAgents 进行编码时,它不会让我将字符串与结构片段连接起来。在结构切片的末尾还需要 ]` 以使其成为有效的 JSON问题:如何在结构切片的前后添加额外数据?将结构附加到一片结构是否有效?创建一个已知长度的切片然后使用范围附加到它会更好吗?
查看完整描述

1 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

将附加信息、代理和右括号写入响应:


 io.WriteString(w, "{")

 io.WriteString(w, AdditionalInfo)

 json.NewEncoder(w).Encode(AllAgents)

 io.WriteString(w, "]}")  // closing ] for data and closing } for root

[ ]请注意,这对代理进行了两个级别的编码。目前还不清楚这是否是您想要的。


另一种方法是创建一个与输出结构匹配的 Go 值并对其进行编码:


v := map[string]interface{}{

    "meta": map[string]interface{}{

        "page":    1,

        "pages":   1,

        "perpage": -1,

        "total":   350,

        "sort":    "asc",

        "field":   "RecordID",

    },

    "data": AllAgents,

 }

 if err := json.NewEncoder(w).Encode(v); err != nil {

    // handle error

 }

同样,不清楚您希望在代理周围嵌套多少。您可能需要这种变化:


v := map[string]interface{}{

    "meta": map[string]interface{}{

        "page":    1,

        "pages":   1,

        "perpage": -1,

        "total":   350,

        "sort":    "asc",

        "field":   "RecordID",

    },

    "data": []interface{}{AllAgents},

 }

 if err := json.NewEncoder(w).Encode(v); err != nil {

    // handle error

 }

回复:效率创建最终大小的切片通常比使用append. 通过使用指针切片[]*SingleAgent而不是结构值切片可能会获得一些效率[]SingleAgent。


查看完整回答
反对 回复 2023-04-24
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信