
十天前,我以Go语言开启了一场技术革新
在我们网站的重写过程中,Koa曾是坚实的选择,表现尚佳。然而,作为开发者,我不仅是一名网站所有者,更是技术追求者。这就是我选择Go的原因——尽管node.js对前端友好,但其对程序员的吸引力逐渐消退。Go的简洁语法、有限的特性、卓越的性能和高效性,使我看到了新的可能。
裸写与架构设计
在决定采用原生Go后,我发现众多开发者选择裸写,不依赖框架和ORM。我坚持这种理念,但并非随意为之。API服务的目录结构清晰,DB层负责数据库操作,Handler层集中业务逻辑,而def层则用来统一结构体定义,避免全局混乱。如需调整结构体,我会使用巧妙的技巧,如JSON序列化时创建新的结构体。
拥抱SQL,拒绝ORM
我更偏爱直接编写SQL,而非ORM工具。Go语言的静态特性使得ORM不易发挥其灵活性,反而可能导致代码混乱。SQL的直观性让我在数据库操作中游刃有余,而ORM在数据查询问题上的局限性,让我选择直接操作。
Go的包管理:挑战与解决方案
尽管Go的包管理带来了挑战,但通过在github上克隆并部署,我找到了解决之道。关于部署过程的详细步骤,可以参考我的文章:《伊撒尔:记录 nginx+go+node+mysql 上线部署过程踩坑》。
技术栈的微调
如httprouter的参数处理,我采用了r.URL.Query().Get("id")的方法,并切换到了fasthttp。Go的cookie管理也是一大挑战,中文字符串的处理通过先base64加密再写入。
技术驱动的变革
我独自用Go重构了ACGzone,从2014年到2018年,每次都有所不同。这次,技术革新成为了驱动,一张图记录了这一转变:
我们的目标是追求创新,永不止步。不是因为守旧无趣,而是因为创新才是技术的真谛。让我们一起,以技术的力量,打破常规,追求更多可能!
更新:2018.10.29
ACGzone已经转型为CliCli弹幕网,核心代码保持不变。node.js除了负责SSR,还担当了解析系统,这个系统的设计充满了技巧和创新,旨在绕过限制获取直链。
