好厉害的 Go,跟 py 一比,简直了

2016-12-29 23:05:19 +08:00
 only0jac

就冲 golang 可以生成二进制单文件这一点,部署方便,想试试

拿 beego 练个手,用了它的 httplib 模块,其中, request 后有个直接将结果转换成 json 的,原文如下:

解析为 JSON 结构, req.ToJSON(&result) 方法

返回结构直接解析为 JSON 格式,解析到 result 对象中

我!以!为!这是和 py 的 json.loads()一样,心理窃喜,接下来……

我传了个 string ,没数据,传个空接口,没数据。。。。。

看了下源码,是直接调用的 json.Unmarshal(data, v),属于 golang 自带的库,可我一搜……

竟然发现,需要提前定义 json 的结构???而且字段首字母必须大写???不然还得声明???

WTF

beego 的 request 可以返回 string ,像 py 的 requests.get(url).text ,但是我不想这样,我想 json.loads(requests.get(url).text)

我就是想获取个 json 而已,能不能不要这么折腾人?

10649 次点击
所在节点    Go 编程语言
88 条回复
incompatible
2016-12-30 17:38:13 +08:00
@est 搞出「 [1, "1", None, {1: 2, None: 0, 2: 3}] 」这种非标 json 的必要性是?
billlee
2016-12-30 20:51:50 +08:00
只是不同的设计模式而已,就像 Java 的 org.json 与 Jackson 的区别。
est
2016-12-30 21:47:02 +08:00
@incompatible 只是说兼容性而已。

py 在运行时可以随意改 json 解析。。。也算个优点吧
pathbox
2016-12-31 11:39:09 +08:00
静态语言和动态语言的区别。你静态语言不过关啊 lz
mengskysama
2017-01-01 01:57:46 +08:00
用 go 写 api 真心累,特别是操作大量 json 的时候不如 node 和 py 灵活。用了十来个框架下来最喜欢的是 koa ,性能开发效率兼备,至于部署的话...都不是个问题。
only0jac
2017-01-01 09:53:25 +08:00
@mengskysama go 部署简单啊,最后只有一个二进制文件, py 部署还得装环境,装虚拟空间, node 没用过,不知道怎么部署
reyoung1110
2017-01-01 20:49:21 +08:00
freestyle
2017-02-12 17:24:36 +08:00
确实,Python 解析 json 比 GO 方便多了

golang 得定义好结构体, 否则用 map[string]interface{} 的话要用的时候每一层都得类型转换.不过 JSON 格式本来就比较灵活,嵌套的话要写一大把结构体-_-
response.Result.(map[string]interface{})["files"].([]interface{})[0].(map[string]interface{})["path"].(string)

另外大写是 go 的机制,大写的才能访问到, 可以用结构体注解表示序列化后的小写 key
type Aria2JsonRPCReq struct {
Method string `json:"method"`
Jsonrpc string `json:"jsonrpc"`
Id string `json:"id"`
Params []interface{} `json:"params"`
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/331121

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX