func GetWM(w http.ResponseWriter, r *http.Request) {
//一写代码
//省略掉了
//var TOTID
//r.Method == "GET"
w.Header().Set("Content-Type", "application/json")
resp, err := http.Get("///xxxxx.json")
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ :=ioutil.ReadAll(resp.Body)
addthis := fmt.Sprintf(`{"id":"%s",`,TOTID)
body = append([]byte(addthis),body[1:]...)
b=string(body)
fmt.Fprint(w, b)
}
这样写是不是很丑?
1
pabupa 2021-01-11 20:06:45 +08:00 via Android
302 ?
|
2
fx 2021-01-11 20:08:09 +08:00
不用 Golang 最快
|
3
Cuo 2021-01-11 20:09:56 +08:00 via iPhone
不能直接从前段请求吗?
|
4
tcsky 2021-01-11 20:30:34 +08:00
丑没关系, 好用啊.
有个 sjson 库可以直接改 json 字符串. |
5
dimlau OP |
7
neoblackcap 2021-01-11 22:45:21 +08:00 1
@dimlau 是不是示例代码漏了一些?我好像没看到有"}"插入进去
按我的理解,如果仅仅是字符串拼接,不涉及到序列化与反序列化,各种库底层修改的逻辑应该大同小异。最多可能会比你这个高效那么一点,区别应该不大。仅仅是 API 封装了,可能好看一点罢了。 有的封装还有可能有额外的开销。看你的选择 |
8
jay777 2021-01-11 22:48:01 +08:00
sjson gjson
|
9
jinliming2 2021-01-11 22:50:40 +08:00 3
不要 ioutil.ReadAll,你这个只是把 resp.Body 第一个字节去掉的话,这样写:
resp, err := http.Get("///xxxxx.json") if err != nil { panic(err) } defer resp.Body.Close() fmt.Fprintf(w, `{"id":"%s",`, TOTID) // 格式化直接写出 io.CopyN(ioutil.Discard, resp.Body, 1) // 丢弃第一个字节 io.Copy(w, resp.Body) // 写出剩余数据 |
10
jinliming2 2021-01-11 22:52:41 +08:00
@neoblackcap 他 http response 里应该是一个完整的 JSON,{.....},下面他把第一个 { 去掉拼上了前面的那一段,} 是原来的 JSON 里就有的
|
11
neoblackcap 2021-01-11 22:53:54 +08:00 1
@jinliming2 哦,你不说我都没搞懂,的确是这样
|
12
treblex 2021-01-12 09:09:38 +08:00
如果是 json 的话 写个 struct 绑定 或者绑定 map[string]interface{},然后在修改会方便点吧,
直接拼字符串是因为有性能要求吗 |
13
hongweiliuruige 2021-01-12 10:19:31 +08:00
确实丑啊,,
|
14
qq1340691923 2021-01-12 11:29:21 +08:00
这种操作就不该 go 来处理,node 做中间层不香吗
|
15
dimlau OP @jinliming2 请问,#9 这样依然还是野路子吗?
是不是一般不会这样处理? 因为感觉如 @suke971219 所说写 struct 有点繁琐,用到的数据在 json 的不同层级,struct 要写好几层? 不如在前端用 js 取想要的就完了。 |
16
jinliming2 2021-01-12 13:38:59 +08:00 via iPhone
@dimlau 具体情况具体对待。你这个需求里面,resp.Body 完全没用,所以直接流转发就行,效率更高,不需要全读到内存里处理。
而其他的 xxjson 啦,struct 绑定啦之类的,都是要把整个 json 读到内存里,解析,然后修改,然后序列化,再写出,这个效率就很低了,对你这个需求来说就没有必要了。除非你需要对 resp.Body 做一些额外的处理。 当然,如果你的 jdon 很小的话,不在乎这点性能,而这样写又不够美观可读的话,那楼上的那些其他的方案也完全可以采用。 我觉得你这种简单的函数,只要写好注释,基本上没啥问题的。 |