Go 必知必会:其实学 Go 很简单。
本文来自极客学院专栏,欢迎订阅:Go入门进阶实战专栏:其实学Go很简单。
文末有面经共享群
关于我
感谢你的关注,我是中阳,一位拥有 10 年互联网研发和管理经验的技术老鸟。曾作为大厂的 Golang 高级工程师,我凭借编程技能在北京安家立业。目前,我正作为技术合伙人投身于创业的浪潮之中。
除了在技术领域的深耕,我在自媒体平台上拥有超过 10 万的读者群体。致力于分享技术博客、开源项目,并且专注于提供就业辅导和职场晋升的指导。希望通过我的专栏,与你一起探索技术的世界,不断提升个人竞争力,共同成长。
从业经历
在 2014 年,我踏入互联网行业,起初从事客户端开发,使用 Java 开发 Android 应用。到了 2016 年底,随着公司业务转型及个人技术追求,我开始涉足服务端开发,运用 Java、PHP、Python 等多种编程语言,并在此过程中积累了丰富的系统架构设计和管理经验。
至 2019 年底,我晋升为公司技术总监。凭借对技术趋势的敏锐洞察,我预见到 PHP 的竞争力可能减弱,而 Go 语言有望占据更多市场份额,甚至可能蚕食 PHP 和 Java 的市场。因此,我带领技术团队在 2019 年底转向 Go 语言开发,并在此感谢前雇主对我们的信任与支持。
如果你所在的公司提供学习 Go 语言的机会,那无疑是一家值得信赖的公司。到了 2023 年初,我与前大厂同事共同创业,目前作为技术负责人参与开发和维护自研项目。同时,我持续撰写技术文章、参与开源项目,并提供就业指导及职场晋升答疑服务。
下面分享一下我的 Go 语言学习之旅,希望能对你有所启发,也希望你能找到自己的“小天才”。
起源
我的 Go 语言学习之旅与一位杰出同事(以下简称“小天才”)密切相关。小天才作为前端开发人员,于两年前加入我们的团队,彼此之间建立了深厚的相互尊重和赞赏。
小天才对我的信任促使他放弃了其他更高薪酬的工作机会;而我为了确保他能顺利加入,也积极与管理层沟通,争取更好的福利待遇。在众多技术同事中,我对小天才的赏识源于他不自我设限、主动承担额外任务的态度,这也正是我们能够获得更多机遇和可能性的原因。
环境
优秀的工作环境是成功的关键。在过去两年中,我带领的团队对公司的 CMS、小程序、网站和活动专题等项目进行了全面重构。我们的后端部分采用了 PHP 的 Laravel 框架,以及一些 Java 旧项目,前端则采用了 Vue 和 Nuxt 框架。
我主要负责系统设计、核心后端开发,并与产品经理共同制定前后端方案。小天才在技术层面展现了前后端的全面能力,受他影响,其他几位同事也成长为全栈开发工程师。
契机
春节前的相对宽松工作量为我们提供了提升项目质量的机会。鉴于团队成员对性能的高追求,我组织了一次关于 Go 语言特性的讨论,特别是其对高并发的天然支持。
利用春节营销活动的需求,我推动团队以项目为导向学习 Go,通过实战深入掌握这门语言。这种学习方式与我当年从客户端转向服务端开发的思路一致——项目驱动的学习效率高,尽管可能不够系统。我的专栏旨在分享敏捷开发经验,同时揭示我曾经的挫折,帮助读者避免走弯路。
你追我赶
在准备营销活动需求的同时,团队开始了 Go 语言的自学之旅。我经常与团队成员,尤其是小天才,在散步或会议中讨论学习中遇到的问题。小天才的进步迅速,这得益于他不设限的态度,这一点至关重要。
我们通过互相提问和解答,快速梳理知识结构,确保深刻理解所学内容。此外,掌握 Go 或任何编程语言的关键是:多实践编码。
落体项目
春节前,公司推出了一项复杂的营销活动,类似于支付宝的集五福。小天才迅速行动,在产品经理完成原型设计和我设计数据库结构后,迅速用 Go 编写了核心逻辑的 demo。
我在此基础上继续开发了分配方案、不同概率集卡的拉新数量和活动成本推算等,这些数据基础让我们能够自信地编写业务逻辑。最终,小天才负责项目开发,我负责代码审查和充分测试。活动效果显著,为公司公众号带来了超过 1 万的新用户,管理层对此非常满意。
我们对项目进行了总结和复盘,在团队内部进行了代码审查,并制定了开发规范,以便团队内部复用。
进阶
受到春节活动成功的鼓舞,我们在元宵节推出了另一项类似活动。在春节活动的基础上,优化了代码,并整理了使用的技术点,包括但不限于:
Go
跨平台编译
Goroutine 和 Channel
Gorm 和 Gin 框架
Redis 缓存
日志统计
登录、CORS 和 Session 中间件
反射
读写锁
Docker
云效流水线部署
K8s 容器编排
总结反思
从决定学习 Go 到实际应用,我们仅用了一天时间来决定,随后一周集中学习 Go 的语法特点,并大量编写 demo。接着,我们用两周时间开发了一个为公众号拉新 1 万+的营销活动。学习 Go 并不难,特别是订阅了我的专栏后,学习过程将变得更加简单。
本专栏内容
划分了四个模块:准备篇、基础篇、进阶篇、实战篇
准备篇:主要讲解 Go 的优势和特点、开发环境搭建等准备工作。
基础篇:主要讲解 Go 语言的语法和基本概念,包括基本数据类型、数组和切片、map、channel、interface、指针、流程控制、函数、错误处理、panic、反射和结构体,每一篇文章都旨在构建读者对 Go 编程基础的深刻理解。基础篇的目标是确保读者能够熟练掌握 Go 的基础语法和编程范式,为后续的进阶学习打下坚实的基础。
进阶篇:将深入讨论 Go 语言的高级特性,内容包括协程、RPC、并发安全、扩展包、部署、ORM 和测试。进阶篇的目的是通过探索 Go 的高级编程技巧和最佳实践,帮助读者提升编程技能,理解如何在实际项目中应用这些特性来解决复杂问题。
实战篇:主要讲解将理论与实践相结合,展示 Go 语言的应用,内容包括设计模式、框架、应用实践、规范 &技巧和重要概念。实战篇旨在帮助读者将所学知识应用于构建高效、可维护的 Go 应用程序。
欢迎关注 ❤
我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。
没准能让你能刷到自己意向公司的最新面试题呢。
感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:InfoQ 面试群。
版权声明: 本文为 InfoQ 作者【王中阳Go】的原创文章。
原文链接:【http://xie.infoq.cn/article/b0fb3e328cb5181e2c428f355】。文章转载请联系作者。
评论