Docs Vault

通过本课程前面内容的学习,相信你已经知道如何开发一个优秀的企业级 Go 项目,并具备参与企业 Go 项目开发的能力。在开发过程中,你还要持续不断的学习,以增强自己的 Go 开发能力,提升职场竞争力。


本节课就来介绍学完本课程后,你应该如何继续提升自己的 Go 开发能力及技术天花板。


学习云原生技术及开发


在掌握了 Go 基础语法,并能熟练开发 Go 项目之后,还需要学习云原生技术。


为什么要学习云原生技术?最直接的原因是,如果你想继续提升你的研发能力,那么未来一定是朝着广度和深度去学习。广度其实就是逐渐具备架构师的能力,深度就是学一些技术性很强的知识。如果想学习提升,一定需要一个学习依托物,目前最好的依托物其实是云原生。因为云原生不仅能让你掌握更多的架构知识,还能从深度上进一步打磨你的技术能力。


学习云原生技术不仅能够极大的提高 Go 开发者的技术能力和技术天花板,还能带给 Go 开发者更多的工作选择和职场竞争力。而且,在我看来,学习云原生技术带来的机遇和能力的提升重要性是一样的。


云原生是什么


云原生(Cloud Native)是一种软件开发和部署的方法论,旨在充分利用云计算的优势,提供高度可扩展、可伸缩、可观测、可维护、自动化、高稳定性的应用程序。使用云原生方法论,所构建出来的应用我们可以称为云原生应用。云原生内容如图 15-1 所示。

图 15-1 云原生是什么

该方法论可以指导开发者基于哪些核心技术栈、采用何种方法来构建特定类型的云原生应用:

  1. 核心技术栈:云原生技术栈以 Kubernetes 为核心,包含多个关键技术方向:容器提供资源编排与调度能力,微服务架构思想可以用来构建独立且易维护的应用,服务网格作为服务间通信的基础设施提供治理功能,声明式 API 让开发者专注定义目标而非实现细节,从而提高效率和抽象层次,不可变基础设施通过创建只能重建的应用实例奠定现代运维基础,而 DevOps 通过改进开发与运维团队的协作,实现快速、可靠和持续的软件交付;
  2. 采用的方法:凡是能够利用云原生核心技术栈构建云原生应用的手段、工具和技术都属于此范畴。这些方法的核心思想,是将应用程序设计为具备弹性和可扩展性的微服务,并部署至容器环境中。通过容器与 Kubernetes 提供的能力,不仅能实现降本增效,还能显著提升应用的稳定性与承载能力。
  3. 构建的应用(云原生应用):基于云原生技术改造的应用程序,能够借助云原生能力实现自动扩缩容、自动化发布、高度自愈、全方位观测。这些能力使应用程序兼具卓越的稳定性、敏捷性和扩展性。


云原生的价值


云原生的核心优势有以下几点:

  1. 降低成本:通过 Kubernetes 提高资源利用率,减少人力投入。例如,容器化技术使资源分配更加精细,减少物理机和虚拟机资源浪费;
  2. 提升效率:容器化部署使应用交付更加快速、简单。声明式 API 和自运维能力减少了运维的复杂度;
  3. 增强业务承载力:云原生技术(如微服务、分布式架构)结合 Kubernetes 的弹性扩展能力,使业务能够快速扩容,轻松应对流量高峰;
  4. 提高业务稳定性:Kubernetes 提供健康检查、故障隔离等机制,结合 Prometheus、OpenTelemetry 等可观测性工具,确保应用始终处于健康状态。


云原生的机遇与挑战


云原生时代充满了新理念、新技术和新开源项目,这些带来了学习和适应成本,但同时也为开发者和企业创造了大量机遇:

  1. 学习成本的挑战:云原生技术复杂且更新快,但掌握这些技术可以扩展职业宽度,提升竞争力。通过学习云原生技术,还能将其理念迁移到业务开发中,反哺自己的开发能力;
  2. 岗位需求的变化:云原生技术的降本增效可能减少部分传统岗位需求,但企业在云原生改造过程中会产生大量相关工作机会。开发者可以通过学习云原生技术,参与改造项目,享受技术红利;
  3. 基础架构开发的机会:云原生带来了基础架构开发岗位的崛起,这类岗位更聚焦技术,适合刚毕业或技术能力需要提升的开发者。相比业务开发,基础架构开发更通用且与业务解耦,可以为未来转型打下坚实的技术基础。


云原生如何赋能开发?


学习云原生技术可以显著降低开发难度并提高开发效率。云原生中的优秀开源项目(如 Kubernetes、Etcd 等)为开发者提供了丰富的代码实践和设计思路。例如,Kubernetes 提供的 wait.PollImmediate 函数,可以直接用于循环执行业务逻辑,而无需开发者自行实现。可以参考 Kuberentes 中 CronJob、Job 设计方式,实现基于 MySQL 数据库的异步任务处理服务。


另外,通过学习 Kubernetes 及其生态系统的代码,开发者可以将这些优质代码库变成自己的“御用工具箱”,从而提高开发效率。


如何学习云原生技术?


学习云原生技术需要兼顾广度和深度。广度帮助我们全面了解云原生技术体系,深度则让我们掌握技术细节并具备落地能力。在学习过程中,可以优先学习核心技术栈,并合理安排学习顺序和方法,结合教材阅读、源码学习和实战操作来提升学习效率。

  1. 广度学习云原生技术:可以通过经典教材快速了解核心技术栈。云原生架构涉及多个层次,核心技术栈包括:虚拟化、微服务、容器、Kubernetes、微服务、监控告警、调用链、消息队列等;
  2. 深度学习云原生技术:可通过源码阅读和实战深入学习核心技术栈。阅读源码和开发实战是一个比看课程更耗精力和时间的学习方式,所以,需要从这些核心技术栈中,再选择出一些更核心、更重要的技术栈去学习。在我看来,可以优先选择阅读 Docker、Kubernetes 的源码,并进行相关实战。


云原生技术快速发展,还需要持续关注行业动态、参与社区讨论和贡献开源项目。通过不断学习新工具和框架,不断提升自己的技术能力和竞争力。


学习 OneX 技术栈


在学习完 Go 基础语法,并掌握 Go 项目开发技术之后,如果想继续提升开发能力和职场竞争力,建议学习云原生相关技术。


上面我介绍了想要真正掌握云原生技术,需要阅读云原生技术栈中优秀开源项目的源码,并进行相关实战开发。建议通过阅读 Kubernetes 源码来掌握云原生基石项目 Kubernetes 的设计和实现,阅读 Kubernetes 源码有一定难度,在阅读源码时建议借助相关课程来降低阅读源码的难度。


除了阅读 Kubernetes 源码之外,还可以学习 OneX 技术栈强烈推荐,哈哈哈,也是我重点维护的一个技术体系)。OneX 技术栈不仅包含了详尽的 Kubernetes 源码解析内容,还包含了 Kuberentes 编程实战项目、云原生 AI (智能体平台 + 机器学习平台)等编程实战项目,而且这些项目都有质量很高的课程进行详细介绍。


OneX 技术栈中的项目使用了跟 miniblog 相同的软件架构、构建方法和项目规范,而且技术之间层层进阶、紧密联系。


整个 OneX 技术栈,完全可以作为企业基础的软件技术栈。通过学习 OneX 技术栈可以极大的提高你的技术能力和天花板。


OneX 技术栈介绍


OneX 技术栈包含了众多 Go、云原生、云原生 AI 相关的技术分享及实战项目。OneX 技术栈的更详细介绍见 https://github.com/onexstack/community。


小而美的项目:miniblog 项目


miniblog 是一个小而美的高质量 Go 入门实战项目,用于实现用户注册、博客创建等业务功能。miniblog 也是本课程的实战项目,其构建思路、软件架构和项目规范与整个 OneX 技术栈保持高度一致。


通过学习 miniblog,不仅可以提高你的 Go 项目开发能力,还可以使你无缝切入 OneX 技术栈中其他项目的学习和实战,为其他 OneX 项目的学习打下坚实的基础。


项目脚手架:osbuilder 项目


osbuilder 是 OneX 技术栈的项目开发脚手架,可以自动生成跟 miniblog 项目完全一致的模版项目,并且具有很高的定制化,例如:

  1. 可选的后端存储:可以选择 memory、MariaDB、Redis、SQLite、PostgreSQL、Mongo、Etcd 等后端存储;
  2. 可选的部署方式:可以选择 Systemd、Docker、Kubernetes 等部署方式;
  3. 可选的 Web 框架:可以选择 gin、grpc、grpc-gateway、kratos、go-zero、kitex、hertx、onex 等 Web 框架;
  4. 可选的应用类型:类似 Kubernetes CronJob、Job 的异步任务处理服务、Web 服务、命令行工具等。


通过不同的可选项, osbuilder 工具会自动生成对应的高质量源码。在自动生成 Web 服务项目类型后,还 osbuilder 工具还支持给项目添加新的 REST 资源实现代码,使你仅用少量的代码适配便可以实现一个新 REST 资源的增删改查操作。


通过使用 osbuilder 工具自动生成项目源码,可以极大的提高项目开发的效率,并保持项目开发风格的高度一致性,从而降低项目后期的阅读和维护成本。


云原生实战项目:OneX 项目介绍



OneX 云原生实战平台 是一个基于 Go 语言开发的云原生实战平台,同时也是一个企业级的云平台。整个项目遵循最佳实践的思路构建,具有以下特点:

  1. 功能全面:OneX 项目涵盖了 Go 开发中几乎所有常用的技术,包括但不限于以下四大技术栈:
  2. 软件开发基础技术栈:包括 Linux、Shell 编程、Makefile 编程、Git 等软件开发所需的基础技术栈;
  3. Go 开发技术栈:涵盖 Web 编程、各类应用实现(如 SDK、ETL 数据抽取、认证授权中心、命令行工具、Web 服务、异步任务、资源限流、代码检查、代码生成等)、中间件使用、HTTP/HTTPS/GRPC/WebSocket 协议、常用功能设计和开发等;
  4. 云原生技术栈:包括 Kubernetes 编程、Docker 实战、Kubernetes 实战、云原生部署实战、声明式编程、不可变基础设施等;
  5. 微服务技术栈:涵盖分布式日志、监控告警、服务编排、调用链、负载均衡、服务治理、配置中心等内容。
  6. 代码质量高:项目具有极高的代码质量,具体体现在以下方面:编程模式全面(包括命令式编程、声明式编程等)、遵循简洁架构原则、代码简洁且健壮、接口性能优越、高可维护性和高可扩展性等;
  7. 项目规范完善:项目严格遵循规范化设计,包含目录规范、代码规范、日志规范、错误码规范、文档规范、提交规范、版本规范等多项规范;
  8. 技术生态闭环:项目全面覆盖 Go 开发中的绝大部分功能点、技术栈和实现方式。通过该实战项目,开发者可以闭环学习整个 Go 开发技术栈。


OneX项目中,包含了很多企业开发中高频使用的服务,例如异步任务执行服务onex-nightwatch、分布式缓存服务onex-cacheserver、分布式资源限流服务onex-ratelimit、命令行工具onexctl、自研静态代码检查工具lint-kubelistcheck等。


云原生 LLMOPS 平台:EasyAI 项目介绍


EasyAI 是一个面向云原生环境的 LLM 连接器,致力于通过简化 LLM 接入和使用的过程,降低业务团队与 AI 技术之间的门槛,从而加速 AI 技术对业务的赋能。EasyAI 项目集成的 LLM 相关功能列表如图 15-2 所示。

图 15-2 EasyAI 项目功能列表

EasyAI 项目实现了 LLMOPS 平台需要的几乎所有的功能。并且 EasyAI 平台中使用到的技术栈包括了 Go 项目开发技术栈、云原生技术栈和 AI 技术栈。通过 EasyAI 项目,开发者可以体系化的加强 Go 项目开发、云原生和 AI 技术的开发能力。


机器学习平台:EasyML

更多企业级应用


OneX 技术栈中,还包括了其他更多的企业级应用。这些应用都采用了最佳实践来构建,并且使用了相同的开发风格、软件架构等。


具体包括:

TODO!!!


借助 AI 工具提升研发效率


随着人工智能技术的快速发展,大型语言模型(LLMs)已成为开发者的重要工具,其中 GPT 类工具作为目前最流行和成熟的 AI 助手,能够有效提升 Go 项目的研发效率。无论是 Go 初学者,还是资深的 Go 开发者,GPT 类工具都能够在编码、问题排查和知识补充等多个环节提供强大的帮助。


在 miniblog 项目开发过程中,也借助了 GPT 类软件来提升开发效率,主要借助 GPT 工具从以下几个方面来提效:

  1. 单元测试用例生成:借助 GPT 类软件自动生成单元测试用例;
  2. 代码注释:借助 GPT 类软件自动生成符合 Go 代码规范的注释;
  3. Go 标识符命名优化:借助 GPT 类软件优化变量命令、函数命名和方法命名等。例如:可以通过 Prompt “请优化上述代码中的变量命名,使其符合 Go 语言开发规范”,来让 GPT 类工具帮助优化变量命名;
  4. 示例代码模版生成(非常好用):借助 GPT 类软件生成示例代码模版,给开发提供一些基础参考。例如:可以通过 Prompt“请给一个 github.com/jinzhu/copier 包的使用示例”,来获取 copier 包的示例代码;
  5. 问题排查和解决(能解决不少问题):在开发过程中,会遇到一些第三方包的报错,将报错信息输入给 GPT 类软件,可以协助定位和解决问题;
  6. 优化代码(能解决一些问题):GPT 类软件可以提供一些代码优化意见。


提示:
miniblog 几乎所有的代码注释都是 AI 生成的,其实这些代码注释主要是为了满足 Go 开发规范,绕过 golangci-lint 的检查,因为代码本身已经很简洁易懂,注释意义并不大。


在开发 miniblog 项目的过程中,GPT 类软件可以提供一些提效帮助。但是受限于 GPT 类工具可理解的代码段长度,LLM 能力等因素,目前还存在以下问题:

  1. 提效帮助有限:目前能够提供的帮助局限在小的优化项上。整个项目的功能设计、软件架构设计、实现方式等设计类的开发内容,仍然需要开发者自行设计和把控;
  2. 生成代码不完善:GPT 生成的代码不一定 100%正确,尤其是在细节实现上可能存在逻辑疏漏或安全隐患。因此,开发者在采纳生成代码前,需进行严格的代码审查和测试;
  3. 存在幻觉问题:LLM 当前存在的一个大的问题是容易出现幻觉问题,在使用 GPT 类工具辅助开发的过程中,需要开发者辨别这类幻觉回答;
  4. 数据可能滞后:GPT 的模型数据可能存在滞后性,因此在接受建议时需要结合最新技术文档或开源社区信息进行对照,确保解决方案的可用性。


整体来看,GPT 目前是一个很不错的提效工具。但是在需要开发更高质量,尤其是更优设计的时候,GPT 并不能提供很好的帮助。这时候,还需要开发者自行设计和实现。


小结(AI 自动生成并人工审核)


本文围绕如何在学习完 Go 基础开发后进一步提升技术能力展开,重点介绍了云原生技术及其相关实践。


云原生作为当前技术发展的核心方向,能够帮助开发者在广度和深度上全面提升,不仅涵盖微服务、容器化、Kubernetes 等核心技术栈,还通过优秀的开源项目和工具赋能开发者,显著提升开发效率和应用稳定性。


文章还详细介绍了 OneX 技术栈,这是一套完整的企业级开发体系,包含了从基础开发到云原生及 AI 实战的高质量项目,帮助开发者系统性地提升技术能力。


此外,文章探讨了 GPT 类 AI 工具在开发过程中的应用,虽然这些工具能在代码生成、问题排查等方面提供一定帮助,但仍需开发者具备扎实的基础和设计能力来主导高质量开发。


通过学习云原生技术、参与开源项目和借助 AI 工具,开发者可以不断突破技术天花板,增强职场竞争力。