Go语言学习路线 - 6.提效篇:不懈地追求提升研发效率

简介: 在入门篇与基础篇之后,我选择做了这一讲提效篇。而在提效篇的推出之前,我也开启[Go语言技巧系列](https://junedayday.github.io/tags/Go-Tip/)的更新,着重分享一些具体的工程化实例,包括错误处理、Go Module等。

为什么要追求研发效能

入门篇基础篇之后,我选择做了这一讲提效篇。而在提效篇的推出之前,我也开启Go语言技巧系列的更新,着重分享一些具体的工程化实例,包括错误处理、Go Module等。

也许有读者会好奇为什么会把提效篇放在这里,在我看来,如果工程师已经度过了入门阶段,就应该重点关注研发效能

严格意义来说,基础篇的分层思想,就是一个很有效的提升研发效能的手段。

研发效能涉及的面很广,但这里我们聚焦于讨论软件编码阶段的工作,专注于提升工程师在开发阶段的效率。

提升了研发效能后,我不太建议大家去主动接手更多的开发工作,而是投入到不断地学习和提升自己,持续提高效率,实现正反馈循环。至于投入到哪些方面更有价值,则是我今天分享的重点。

培养意识是核心

我并不想直接聊提效的各种手段与方法,因为这些都是停留在 的阶段,大概率会随着时间变化而变化。那什么是 呢?我相信是工程师的思想意识。

举四个比较关键的点:

保持一颗追求“偷懒”的心

提高效率的最大原动力是为了“偷懒”,这一点很容易理解。但难的是在重复性的日常工作下,我们如何能够抵抗住“混一天是一天”的躺平心态,想方设法地缩短现有的工作时间。

对知识的开闭原则

软件工程里有开闭原则OCP,我们对待知识也要有一定的“开闭心态”:

  • 开放 - 对待知识的初始心态要开放,海纳百川。要做到这一点很难,我们要抛开原有的观念,才能对有一个客观的认知。
  • 封闭 - 使用知识时前反复斟酌,考虑周全。要推广、实践一个技术点,不仅仅是技术本身的问题,还要考虑人员因素、团队现状、公司发展、投入产出比等现实性的问题。

原理决定选择,选择重于实现

如今,开源社区已经提供了各种现成工具,日常功能的实现已经基本没有技术瓶颈,这时更考验人的是如何适应后续的可扩展性。选择MySQL还是ES,选择 官方sql库 还是比较重量级的GORM库,都是很值得考量的点。

不同选择代表着不同的发展方向,这个与我们的职业发展一样,一旦开了头,很难改变路线。所以,在做选择之前,我们要尽可能地了解背后的原理,根据自己的应用场景进行选择。

脚踏实地,追求技术最优解

技术人在面向业务编程时,常常会做技术上的妥协。固然,我们应脚踏实地从业务出发去做技术,但如果你对业务有了自己的理解,有了更优解,哪怕需要多几天的开发周期,你也应该尝试说服周围人,这样更能体现你的技术和业务的领导力

提效1 - 编程语言

虽然这是一篇关于Go语言的学习路线,但我希望大家不要把目光局限于这一门语言。

比如,在日常开发、部署、故障排查的过程中,Shell是一个高频的工具;面对大数据处理场景时,用Go语言开发需要造大量轮子,远不如Java体系高度的成熟度;Python在做测试脚本的开发时颇具效率,也有大量的成熟的软件平台。

对普通开发人员来说,逆主流是个大忌!

提效2 - RPC框架

目前在开源社区中,最主流的RPC框架是Gin,可以通过链接进行访问。如果你是一个初学者、公司也没有一个成熟的框架,那就毫不犹豫地选择这个吧!

同时,以gRPC为核心的gRPC-Gateway方案,是我比较推荐的进阶方案,相对Gin而言学习难度会高一些,大家可以通过这个链接进行访问。它的优点是支持http1.xhttp2.0,跨语言的解决方案protobuffer,以及大量的插件化工具(尤其是自动生成接口文档)。

最后,如果你所在的公司已有一个成熟的RPC框架,那就毫不犹豫地使用它吧!同时,你也可以学习GingRPC-Gateway中优点,尝试往公司框架中贡献一些特性,提升自己的技术影响力。

关于第二个gRPC-Gateway方案,后续我会在Go语言技巧系列中花几章进行介绍。

提效3 - 工具库

Go语言在开源社区有广泛的现成工具库,但没有如Spring全家桶那般形成标准,往往需要我们自行挑选。

我们固然可以从百度中搜索出一个解决方案直接使用,也可以直接搜索一个使用率最高的库,但知其所以然更加重要。我非常建议大家在使用对应的工具库前,多花点时间学习底层原理,如使用GORM前先掌握MySQL的基础。

工具库这部分的学习是长期的工作,也是我后续分享的碎片知识点。

提效4 - IDE

我非常建议新手朋友使用IDE,也就是Goland

虽然重度依赖IDE会带来限制,但往往利大于弊,例如:

  • 在内存中缓存数据,实现快速跳转
  • go fmt/goimports等格式化代码的工具
  • 引入Golint进行静态代码扫描
  • Refactor重构等特性,在大型项目中很有价值
  • 快速生成单元测试、接口、实现等
  • 利用Live Template特性,给常用代码生成模板
  • 断点调试

如果你一上手就直接用VSCode、甚至Vim,你可能根本不清楚有这么多工具可以帮助你提升工程质量。当你熟练掌握后,就可以将这些特性作为插件引入到VSCodeVim中。

提效5 - 辅助工具

在日常研发时,有许多辅助性的工具,在特定场景带来意想不到的帮助,需要大家结合自己的场景选择:

  • 开发环境
  • git命令与工作流
  • markdown文档写作
  • 个人任务管理
  • chrome/wireshark/postman等网络相关工具
  • shell排查性能问题

结束语

提效是一个长期的工作,需要我们长期摸索前进。

提效篇只是一个开始,更多的相关内容,我会放到 Go语言技巧系列 里,欢迎大家持续关注。

目录
相关文章
|
5天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
23 2
|
3天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
11 2
|
3天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
14 2
|
7天前
|
程序员 Go
go语言中的控制结构
【11月更文挑战第3天】
84 58
|
6天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
3天前
|
Go
go语言中的 跳转语句
【11月更文挑战第4天】
10 4
|
3天前
|
JSON 安全 Go
Go语言中使用JWT鉴权、Token刷新完整示例,拿去直接用!
本文介绍了如何在 Go 语言中使用 Gin 框架实现 JWT 用户认证和安全保护。JWT(JSON Web Token)是一种轻量、高效的认证与授权解决方案,特别适合微服务架构。文章详细讲解了 JWT 的基本概念、结构以及如何在 Gin 中生成、解析和刷新 JWT。通过示例代码,展示了如何在实际项目中应用 JWT,确保用户身份验证和数据安全。完整代码可在 GitHub 仓库中查看。
14 1
|
7天前
|
Go 数据处理 API
Go语言在微服务架构中的应用与优势
本文摘要采用问答形式,以期提供更直接的信息获取方式。 Q1: 为什么选择Go语言进行微服务开发? A1: Go语言的并发模型、简洁的语法和高效的编译速度使其成为微服务架构的理想选择。 Q2: Go语言在微服务架构中有哪些优势? A2: 主要优势包括高性能、高并发处理能力、简洁的代码和强大的标准库。 Q3: 文章将如何展示Go语言在微服务中的应用? A3: 通过对比其他语言和展示Go语言在实际项目中的应用案例,来说明其在微服务架构中的优势。
|
7天前
|
Go 数据处理 调度
探索Go语言的并发模型:Goroutines与Channels的协同工作
在现代编程语言中,Go语言以其独特的并发模型脱颖而出。本文将深入探讨Go语言中的Goroutines和Channels,这两种机制如何协同工作以实现高效的并发处理。我们将通过实际代码示例,展示如何在Go程序中创建和管理Goroutines,以及如何使用Channels进行Goroutines之间的通信。此外,本文还将讨论在使用这些并发工具时可能遇到的常见问题及其解决方案,旨在为Go语言开发者提供一个全面的并发编程指南。
|
5天前
|
Go 调度 开发者
探索Go语言中的并发模式:goroutine与channel
在本文中,我们将深入探讨Go语言中的核心并发特性——goroutine和channel。不同于传统的并发模型,Go语言的并发机制以其简洁性和高效性著称。本文将通过实际代码示例,展示如何利用goroutine实现轻量级的并发执行,以及如何通过channel安全地在goroutine之间传递数据。摘要部分将概述这些概念,并提示读者本文将提供哪些具体的技术洞见。