由于我们网站( 程序员在囧途 )主做Go技术栈条线课程,在学员的建议下决定做个golang周报。定期写一些 golang相关知识点、好库推荐和个人观点的表达。希望大家喜欢,文风可能比较犀利,恐会引起不适。
每周不定期更新2篇左右。
一、GORM 发布2.0
看这里
国内的ORM有几个,我个人用的最顺手的是Gorm ,虽也有缺点,但是再漂亮的脸蛋上都可能有雀斑。关键是要顺手,这里希望gorm越做越好。不排除后面我们要针对gorm做个脚手架
当然,这里需要说的是,做项目并不能过度依赖ORM。看到很多同学脱离ORM后一句稍微复杂的SQL都写不出,这是不对的。
二、gopsutil 性能监控
用过python的同学可能会知道有一个库: psutil 。提供了便利的方法获取系统信息:如CPU,内存,磁盘,网络等,还可以判断进程是否存在、获取进程列表、获取进程详细信息等 适合做一些诸如采集系统信息和监控的服务。
那么Go也有一个性能不错的的移植库。
三、关于GO处理浮点数精度问题
1、go有个第三方包deciaml
2、数据库层面,如mysql,可以用mySQL的decimal类型。
不过有个缺陷,到了Go代码层面,尤其是做一些rpc神马的,没有原生的decimal类型支持。 所以 可以考虑把价格字段拆成 2个int 。一个存小数点左边,一个存小数点右边。 到了代码层面都用 int就OK了
四、Go和java做微服务哪个更有优势。
此问题来自群友提问。
几年前 确实 有“java和Go”优势不优势的问题。现在已经进入云原生的年代,那么“”谁比谁好“”这件事是不存在的。
1)GO做微服务也可能用到java技术栈的 cloud 组件(如nacos、sentinel)
2)java做微服务 也可能用GO技术栈的cloud组件(如jaeger)。
关键的,这两者都离不开docker、k8s, service mesh (这些大部分是Go的天下)
单纯论 web框架,在不同领域和业务场景 确实有优势不优势之说。 譬如某java框架在社区上比某Go框架全且更强大。Go某框架在某些场景中,开发效率比java某框架高一些
但是在微服务角度,这两者只有你侬我侬、你是老汉我推车,没有互相伤害
五、关于“敏感词过滤“
这是一个学员提出来的问题。 除了使用关键字 一个个替换还有啥办法? 或者说算法吗?
这里稍稍提示下。 除了硬替换,比较常用的算法就是前缀树 ,之前有个课程 我们讲到过golang实现前缀树的简单做法
前缀树 主要用在 框架的路由上 。譬如/service/user/list 和/service/user/detail .他们都有公共前缀 /service/user/ , 利用前缀树查询性能更高
敏感词过滤也一样,譬如 来自 日本/美食,/日本/苍老师 。。。 你懂~~~
六、最后不忘宣传下我们。
大约是两年前正式开始做go技术栈课程,由于我们本身是软件公司,因此很多时候的课程素材取自于实际项目,所以很少会按部就班的教学,这点敬请谅解。从最早的Go单框架课程到微服务,再到目前正在逐步进入go云原生技术栈课程,越做越嗨。 Go的精髓在云原生、中间件,web开发只是其中一个很小部分。
很多同学有个小误区,一接触新语言立刻就是想把它用来做门户网站,做爬虫(想一想python)。学习一个语言,首先要了解它的擅长点,技术栈的领域是什么,然后选择适合自己的方向扒了猛干~~~~,同时还要不断关注市场方向,很多技术栈也是在市场的演化中不断进行调整,从而形成目前的领域。
这里再次放出我们目前Go学习路线, (每个月都会有进化和调整) 。明年主要的路线进入云原生方向,更偏向原理级,敬请期待~~~
另外,想做一个好程序员?
其实是没有“最好的程序员”的,必须是一个“不断进化的程序员”才是好程序员。