好厉害的 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 而已,能不能不要这么折腾人?

10417 次点击
所在节点    Go 编程语言
88 条回复
est
2016-12-30 00:36:51 +08:00
map[interface{}]interface{} 大法好。

另外静态语言里搞一个 [1, "1", None, {1: 2, None: 0, 2: 3}] 好像是不可能实现的。。
sagaxu
2016-12-30 00:42:55 +08:00
@est JAVA 可以用 list of Object
est
2016-12-30 00:53:27 +08:00
@sagaxu 一个方法只接受普通 array 作为参数怎么办。。。
orvice
2016-12-30 01:08:38 +08:00
首字母大写是因为不大写 json 包就获取不到成员的值了。
orvice
2016-12-30 01:13:43 +08:00
也不一定要定义结构体啦,也可以用 map[string]interface{} 但是类型转换会烦死人、。。
sagaxu
2016-12-30 01:44:28 +08:00
@est Object[]
Reficul
2016-12-30 02:01:32 +08:00
等到接手一个老项目,不知道传过来的 JSON 里面元素有哪些的时候,就能感叹动态一时爽的道理了
yegle
2016-12-30 03:08:20 +08:00
@est
可以实现,就是麻烦一点。你需要用一个 struct 来 hold 所有可能的值(类似 C union ),然后自己写 marshal/unmarshal 。
vizee
2016-12-30 03:24:07 +08:00
好的, 那就不用
ericls
2016-12-30 03:46:25 +08:00
我喜欢了很多的语言 是不是不够上道
keysona
2016-12-30 04:12:24 +08:00
更有有点吧。

看你是要性能还是轻松了。

大部分情况下我会选择轻松。
huodon
2016-12-30 06:19:30 +08:00
底子太差。。。
20015jjw
2016-12-30 07:24:27 +08:00
@huodon 这都能黑?
jingniao
2016-12-30 07:41:03 +08:00
静态偏底层的处理,意味着 python 隐藏的的一些细节, go 中你得自己来处理。
昨天学习 go ,重写一个 python 模块,代码量至少两倍。
assassinpig
2016-12-30 07:56:51 +08:00
Go 不适合 LZ
MushishiXian
2016-12-30 08:09:30 +08:00
.....这有啥好吐槽的,你怎么不说性能
only0jac
2016-12-30 08:33:36 +08:00
@messyidea 感谢,这篇很详细,回去仔细看看

@limhiaoing 方便吗,如果返回的 json 有 100 个字段,难道我 struct 里也需要跟着定义 100 个吗(假设这 100 个字段都有用)
only0jac
2016-12-30 08:37:42 +08:00
@kkk330
var v interface{}
json.Unmarshal(data , v)
fmt.Println(v)
这种定义空接口是不会输出任何东西的
jeffersonpig
2016-12-30 08:43:42 +08:00
最不能忍的是 go 强制{}的对齐方式, WTF
limhiaoing
2016-12-30 08:45:34 +08:00
@only0jac
你非要着眼于不方便的地方不用就是了!

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

https://www.v2ex.com/t/331121

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

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

© 2021 V2EX