【译】Goland 中的隐藏宝石
在日常使用 Goland
时,团队收集了一些可以帮助我们专注于创造的同时减少重复工作的小技巧。
如果你是在 IDEA
中使用的 Go
插件,或者其他 IntelliJ
的产品,同样也有这些特性。
在日常使用 Goland
时,团队收集了一些可以帮助我们专注于创造的同时减少重复工作的小技巧。
如果你是在 IDEA
中使用的 Go
插件,或者其他 IntelliJ
的产品,同样也有这些特性。
在之前实现的 JSON
解析器中当时只实现了将一个 JSON 字符串转换为一个 JSONObject
,并没有将其映射为一个具体的 struct
;如果想要获取值就需要先做断言将其转换为 map
或者是切片再来获,会比较麻烦。
1 | decode, err := xjson.Decode(`{"glossary":{"title":"example glossary","age":1}}`) |
但其实转念一想,部分场景我们甚至我们只需要拿到 JSON
中的某个字段的值,这样还需要先声明一个 struct
会略显麻烦。
经过查询发现已经有了一个类似的库来解决该问题,https://github.com/tidwall/xjson 并且 star 数还很多(甚至名字都是一样的😂),说明这样的需求大家还是很强烈的。
于是我也打算增加类似的功能,使用方式如下:
之前在写 gscript时我就在想有没有利用编译原理实现一个更实际工具?毕竟真写一个语言的难度不低,并且也很难真的应用起来。
一次无意间看到有人提起 JSON
解析器,这类工具充斥着我们的日常开发,运用非常广泛。
以前我也有思考过它是如何实现的,过程中一旦和编译原理扯上关系就不由自主的劝退了;但经过这段时间的实践我发现实现一个 JSON
解析器似乎也不困难,只是运用到了编译原理前端的部分知识就完全足够了。
得益于 JSON
的轻量级,同时语法也很简单,所以核心代码大概只用了 800 行便实现了一个语法完善的 JSON
解析器。
大概在两年前我写过一篇 撸了一个 Feign 增强包,当时准备是利用 SpringBoot + K8s
构建应用,这个库可以类似于 SpringCloud
那样结合 SpringBoot
使用声明式接口来达到服务间通讯的目的。