- 博客(898)
- 资源 (1)
- 收藏
- 关注
原创 当一切皆可用Python:Go这样的通用语言与DSL的未来价值何在?
并且在云原生、后端开发等领域占据主导地位,但在 LLM 的训练数据占比上,相较于 Python、JavaScript 等拥有更长历史和更广泛应用场景(尤其是 Web 前端、数据科学等产生大量开源代码的领域)的语言,仍然处于“低资源”状态。最终,技术的浪潮会淘汰掉不适应变化的,也会催生出新的、更强大的生命体。这门进阶课程,是我多年 Go 实战经验和深度思考的结晶,旨在帮助你突破瓶颈,从“会用 Go”迈向“精通 Go”,真正驾驭 Go 语言,编写出更优雅、 更高效、更可靠的生产级代码!
2025-06-19 08:01:43
300
原创 【Go并发调度艺术】02 可伸缩的并发引擎:从分布式调度到M:P:N模型的演进
面对全局锁的瓶颈,一个自然的想法是:“能不能用无锁(lock-free)数据结构替代?虽然无锁算法避免了操作系统层面的互斥锁,但其底层的原子操作在多核环境下仍然存在对共享内存的竞争(比如缓存行争用),有时甚至可能因为过度复杂的同步逻辑而导致性能还不如细粒度的锁。今天,我们将继续跟随Dmitry Vyukov的设计思路,看看Go调度器是如何一步步破解这个全局锁魔咒,通过引入分布式调度思想、工作窃取机制,并最终演化出我们今天熟知的、高度可伸缩的。的轻量化本质,以及早期M:N调度模型是如何尝试满足这些目标的。
2025-06-19 08:01:43
40
原创 【Go并发调度艺术】01 轻量与并发的初心:Goroutine的设计目标与早期M:N模型的探索
在这个系列里,我们将一起深入探索Go语言并发模型的基石——调度器。我们将不仅仅学习“是什么”,更要追本溯源,跟随Go调度器的核心设计者之一Dmitry Vyukov的思考路径,理解“为什么这么设计”。我希望通过这种方式,能帮助大家将调度器的核心理念内化为自己的知识,而不仅仅是应对面试的记忆碎片。今天,我们从故事的起点开始:Go语言对并发的“初心”是什么?以及早期调度模型(M:N)是如何探索并暴露出新的挑战的?首先,我们来看看Go团队究竟为Goroutine调度器构想出一个怎样的设计目标。
2025-06-18 08:00:38
85
原创 解构Go并发之核,与Dmitry Vyukov共探Go调度艺术
我们将设身处地,从他最初面临的设计目标和挑战开始,一步步看他是如何分析问题、尝试方案、做出权衡,并最终构建出我们今天所熟知的、强大的Go调度器的。无论你是希望在技术深度上更进一步,还是想在面试中展现对Go并发的透彻理解,亦或是对计算机系统底层原理充满好奇,这个微专栏都将是一次不容错过的思想盛宴。优雅的抢占机制又是如何设计的,以保障系统的响应性与GC的顺畅?
2025-06-18 08:00:38
396
原创 “骑手与大象”架构:超越微服务与单体之争的务实之道?
骑手与大象”架构,正是在微服务的灵活性、分布式能力与单体的低心智负担、高开发效率之间做出的一种明智权衡。DealGate 将其架构模式命名为“骑手与大象”,其灵感来源于心理学中的一个经典比喻:人类的思维由两部分组成——理性的“骑手”(对应我们发达的前额叶皮层,负责规划、分析和决策)和感性的、更强大的“大象”(对应我们原始的、更。它也再次印证了一个朴素的道理:优秀的架构设计,往往不是对某种“主义”的盲从,而是对业务需求的深刻理解和对不同技术优劣的精准把握,最终在各种约束条件下找到那个“恰到好处”的平衡点。
2025-06-17 08:00:22
513
原创 GCP大面积故障,Go语言是“元凶”还是“背锅侠”?
将 AI 视为一个能提供建议、加速编码的助手是合适的,但如果过度依赖,甚至将其生成的代码不经审视直接合入生产,那无异于引入了新的、更不可控的风险源。Go 语言的设计,如其显式错误处理、简洁性带来的高可读性、以及强大的并发能力,都为构建健壮、高效的系统提供了良好的基础。但语言提供的机制,终究不能替代开发者的责任心和良好的编码习惯。这门进阶课程,是我多年 Go 实战经验和深度思考的结晶,旨在帮助你突破瓶颈,从“会用 Go”迈向“精通 Go”,真正驾驭 Go 语言,编写出更优雅、 更高效、更可靠的生产级代码!
2025-06-16 08:00:17
766
原创 Go还是Rust?2025年技术选型之辩
作为一名在 Go 领域深耕多年的老兵,我想结合 RustRover 的这篇文章,谈谈我的一些看法,希望能为正在做技术选型的你,提供一些来自 Go 视角的参考。在一个复杂的系统中,完全可能出现 Go 与 Rust 各司其职的场景:例如,用 Rust 编写对性能和内存安全要求最高的底层核心计算模块或驱动,然后用 Go 来构建上层的业务逻辑、API 接口和分布式调度系统。如果你的工作场景确实需要 Rust 的特性,或者你对系统底层有浓厚兴趣,学习 Rust 会是一个很好的补充。,受到了各位读者的热烈欢迎和反馈。
2025-06-15 08:04:21
762
原创 Go 1.25新特性前瞻:GC提速,容器更“懂”Go,json有v2了!
并且,和之前的版本一样,Go 1.25 带来的许多改进,都如同“无形之手”,你可能无需修改一行代码,甚至无需刻意感知,只需简单升级,便能享受到性能的飞跃、诊断能力的提升以及潜藏错误的暴露。我鼓励所有 Go 开发者,积极尝试 Go 1.25 RC1 版本,将其应用到你的开发、测试环境中,并向 Go 团队提供宝贵的反馈。这门进阶课程,是我多年 Go 实战经验和深度思考的结晶,旨在帮助你突破瓶颈,从“会用 Go”迈向“精通 Go”,真正驾驭 Go 语言,编写出更优雅、更高效、更可靠的生产级代码!
2025-06-14 08:02:16
566
原创 爽就完了!Go语言的“简单之美”为何让开发者直呼过瘾?
正如发帖者所言的“shit ton of stdlib”(极其丰富的标准库),Go 强大的标准库覆盖了网络编程、并发处理、数据编解码、加密、I/O 操作等众多领域,极大地减少了对外部第三方库的依赖,降低了项目的复杂性和潜在的供应链风险。那位从 Scala 转到 Go 的开发者所描述的“从100倍重力训练环境出来,到了只有1倍重力的地方”那种“如释重负”的感觉,道出了许多从复杂语言或生态迁移到 Go 的开发者的心声。在这个日益复杂的世界里,Go 语言提供的这种“简单”和“直接”,本身就是一种强大的力量。
2025-06-12 08:01:16
668
原创 Sam Altman的“温和奇点”已至:我们真的越过了AI的“事件视界”吗?
这个大脑将是高度个性化且易于使用的,其潜力将仅受限于“好的想法”。他以社交媒体算法为例,指出它们虽然能极好地理解并利用用户的短期偏好(让你不停地刷),但却可能与用户的长期福祉相悖,这便是“错位的 AI (misaligned AI)”的体现。无论我们是否完全认同 Altman 的所有预测和时间表,一个不争的事实是,AI 技术的指数级发展正在以前所未有的速度改变着我们的世界。他认为,在最重要的方面,2030年可能与现在并无太大不同:“人们依然会爱他们的家人,表达他们的创造力,玩游戏,在湖中游泳。
2025-06-11 08:00:25
905
原创 告别手写汇编:Go官方提出原生SIMD支持,高性能计算将迎来巨变
SIMD 向量类型将被定义为不透明的结构体(Opaque Structs),而非数组,以避免动态索引(硬件通常不支持)带来的问题。@dr2chase 的示例通过一个“加权内积”的例子,分别用这三种模式实现了跨架构的 SIMD 加速,直观地展示了不同组织方式对代码结构和可维护性的影响。这不仅将直接惠及需要极致性能的 Go 应用,也将为 Go 语言的整体生态(例如标准库的内部优化)注入新的活力。这个分层设计,既满足了对底层硬件极致控制的需求,也为广大开发者提供了简单易用的可移植方案,实现了优雅的权衡。
2025-06-09 08:03:00
540
原创 【征服Go并发测试】03 实战演练:用 testing/synctest 构建可靠、高效的并发测试案例
包的设计理念、核心 API 与其背后的“魔法”(如“气泡”隔离和“合成时间”)。理论的清晰是为了指导实践的高度。现在,是时候卷起袖子,通过一系列具体的实战案例,来真正感受。本篇文章,我们将从官方示例入手,逐步深入到更复杂的自定义并发场景,并探讨如何测试依赖网络等外部 I/O 的代码。注:以下所有示例代码均假设在 Go 1.25 或更高版本环境下,或在Go 1.25发布前使用gotip版本。中,我们一起探讨了传统 Go 并发测试的种种“痛点”,并深入剖析了 Go 1.25 带来的官方解决方案——
2025-06-07 08:23:55
192
原创 千呼万唤始出来?Go 1.25解决Git仓库子目录作为模块根路径难题
这一约定确保了版本标签的唯一性和明确性,避免了不同子目录模块可能存在的标签冲突,以及全局标签与特定子目录模块版本之间的模糊性。可以预见,Go 1.25 的这一特性将成为 Go 开发者工具箱中的一个重要补充,它不仅解决了单个模块的组织问题,更为 Go 生态系统拥抱和发展 Monorepo 实践提供了坚实的基础。允许开发者使用简洁的自定义导入路径,同时将 Go 模块代码组织在 Git 仓库的子目录中,保持了仓库根目录的整洁。这样的导入路径,当前Go 工具链已经能够处理,但版本标签也需要遵循子目录前缀的规则。
2025-06-07 08:23:55
631
原创 Go项目该拥抱Monorepo吗?Google经验、etcd模式及白盒交付场景下的深度剖析
这些微专栏通常会围绕一个特定的、值得深入探讨的技术点或主题(无论是 Go 语言的进阶技巧、AI 开发的某个具体环节,还是某个工具的深度剖析等),以 3 篇左右的篇幅进行集中解析和分享。与此同时,Go语言的依赖管理从早期的GOPATH模式(其设计深受Google内部Monorepo实践的影响)演进到如今的Go Modules,我们不禁要问:在现代Go工程实践中,尤其是面对日益复杂的项目协作和特殊的交付需求(如国内甲方普遍要求的“白盒交付”),传统的Single Repo模式是否依然是唯一的最佳选择?
2025-06-06 08:00:43
525
原创 【征服Go并发测试】02 官方破局:testing/synctest 的设计、API 与实现原理深度剖析
中,我们深入探讨了传统 Go 并发测试方法所面临的种种挑战——不确定性、缓慢、难以调试等“七宗罪”。这些痛点不仅消耗了开发者的宝贵时间和精力,更对软件质量构成了潜在威胁。幸运的是,Go 团队听到了社区的呼声,并在 Go 1.25 版本中正式推出了。它经历了从提案、实验性引入、社区反馈、设计迭代到最终方案确定的完整过程。的设计理念、核心 API 的功能与语义,并初探其背后的实现魔法,看看 Go 团队是如何为我们打造出这把征服并发测试的“神兵利器”的。的故事始于社区对更可靠并发测试工具的迫切需求。
2025-06-06 08:00:43
250
原创 【征服Go并发测试】01 并发测试的“噩梦”:为何你的 Go 测试如此脆弱与缓慢?
它们不仅消耗着我们的时间和精力,更严重的是,它们会侵蚀我们对测试有效性的信心,甚至可能让潜在的并发 bug 悄悄溜进生产环境。这些社区的探索无疑是有价值的,它们为 Go 官方解决并发测试问题积累了宝贵的经验和场景需求。然而,一个由语言层面(或紧密结合运行时的标准库层面)提供的、非侵入式的、通用的并发测试解决方案,始终是广大 Go 开发者翘首以盼的。检测器主要关注内存访问层面的数据竞争,对于更高级别的逻辑竞态(例如,两个操作的顺序依赖,即使它们各自访问的数据是受保护的),它可能无能为力。它究竟是如何设计的?
2025-06-05 08:01:40
751
原创 Go 错误处理语法之争尘埃落定?Go 团队为何十五年探索后仍选择“不”
Go 语言在错误处理语法上的探索历程,充分体现了其在语言设计上的审慎与对社区反馈的重视。尽管长达十五年的努力未能催生出被广泛接受的新语法,但这并不代表失败,而是对 Go 核心设计原则的坚守和对现实复杂性的认知。对开发者而言,这意味着需要继续在现有的、经过验证的错误处理模式下精进技艺,同时期待 Go 语言在库和工具层面带来更多辅助,以更优雅、更高效地构建可靠的应用程序。这场关于错误处理的“语法之争”虽然暂时告一段落,但其引发的关于简洁、清晰、实用与语言稳定性的思考,将对 Go 的长远发展产生深远影响。
2025-06-04 08:01:13
942
原创 AI编码工具“真香”还是“智商税”?一位资深码农的“挑衅”与Go开发者的反思
AI 辅助编程的浪潮已然到来。他写道:“如果你在6个月前(或者,天哪,两年前用Copilot的时候)尝试使用LLM编码并失败了,那么你并没有在做大多数严肃的LLM辅助编码者正在做的事情”。再次展示了 Gemini 等 AI 模型在编码领域的惊人进展,我们不禁要问:AI 编码工具,究竟是能极大提升生产力的“真香”利器,还是又一轮被过度炒作的“智商税”?这能让开发者从重复性的工作中解放出来,更快地进入“调整代码并立即看到效果更好”的“黄金时刻 (golden moment)”,获得即时反馈的“多巴胺冲击”。
2025-06-03 19:00:00
779
原创 “这代码迟早出事!”——复盘线上问题:六个让你头痛的Go编码坏味道
良好的 API 设计是软件质量的基石,而清晰、准确的文档则是 API 可用性的关键。为了更好地简化匿名函数,Go团队也提出了关于引入轻量级匿名函数语法的提案(Issue #21498),该提案一直是社区讨论的焦点,它旨在提供一种更简洁的方式来定义匿名函数,尤其是当函数类型可以从上下文推断时,从而减少样板代码,提升代码的可读性和编写效率。当遇到文档不清晰的 API 时,除了“猜测”,更积极的做法是向 API 提供方寻求澄清,或者在有条件的情况下,参与到 API 文档的改进和完善中。往往是更明智的选择。
2025-05-31 11:00:19
679
原创 当Gopher拥有了“Go语言女友”:一张图带你读懂Go的那些“可爱”特性
现实中的 Go 语言也并非完美无缺,它依然在不断发展和进化。但不可否认的是,这些“可爱”的特质,正是 Go 语言独特魅力和强大生命力的源泉。今天,就让我们化身“恋爱观察员”,逐条“解密”这张 Meme 图,看看 Go 语言是如何成为许多开发者心中“理想型”的。Go 语言的简洁性和一些强制性规范(如未使用变量的编译错误),也在某种程度上“迫使”开发者写出更清晰、更规范的代码,更易于审查。Go 是一门静态类型语言,编译器在编译阶段就能帮你发现大量的类型错误和低级 Bug,就像一位尽职的“审查员”。
2025-05-30 13:03:53
887
原创 Go x/exp/xiter提案搁浅背后:社区的选择与深度思考
的讨论过程本身就是一次宝贵的社区实践,它汇集了众多 Go 开发者的智慧与经验,即便提案未被接纳,其间的深入思考和论证也为 Go 语言迭代器生态的未来发展指明了方向,并留下了丰富的参考。DeedleFake等人指出,在没有更简洁的匿名函数语法(如 #21498 提案)的情况下,使用这些适配器时,匿名函数的类型签名显得冗余和笨拙,降低了代码的简洁性。提案的核心内容做个简单解读,说说社区围绕它的主要争论点,以及最终导致其搁浅的关键因素,并简单谈谈这一决策对 Go 语言生态的潜在影响与启示。
2025-05-29 12:01:22
892
原创 Google I/O 2025 Go语言进展:生产力、生产就绪与 AI 赋能
请点击上方蓝字TonyBai订阅公众号!大家好,我是Tony Bai。在Google I/O 2025大会上,Go 产品负责人 Cameron Balahan 和开发者关系负责人 Marc Dougherty 详细阐述了 Go 语言在生产力、生产就绪度和开发者体验方面的最新进展及未来规划。演讲强调了 Go 语言以规模化为核心的设计理念及其三大指导原则:生产力、超越语言的完整体验和生产就绪。重点介绍了Go 1.23和Go 1.24版本在生产力方面的革新,包括引入迭代器简化循环、gopls 的智能现代化能力以及
2025-05-25 08:17:16
800
原创 API 设计的“Go境界”:Go 团队设计 MCP SDK 过程中的取舍与思考
通过对这些设计细节的“庖丁解牛”,我们不难发现,Go 团队在打造这个 MCP SDK 的过程中,无时无刻不在思考如何将 Go 语言的设计哲学、惯用模式以及对工程实践的深刻理解融入其中,力求在满足协议规范的完整性的同时,为 Go 开发者提供一个简洁、健壮、易用且面向未来的编程接口。Go 团队为 MCP SDK 所做的这些思考和设计决策,为我们提供了一个宝贵的学习范例,展示了如何在 Go 的世界里,打造出既满足复杂需求,又不失简洁与优雅的 API。没有绝对的“正确”,只有在特定上下文下的“更优”。
2025-05-23 08:00:21
972
原创 Go工具链进化:go.mod新增ignore指令,破解混合项目构建难题
这是早期讨论中的一个关键阻碍。尽管社区提出过多种临时解决方案,如在特定目录放置空 go.mod 文件、使用工具特定的忽略配置(如 gopls 的 directoryFilters 或 goimports 的 .goimportsignore),但这些方法要么不便携,要么不成体系,导致了生态系统的碎片化。经过多轮讨论和对各种方案(如独立的 .goignore 或 go.ignore 文件、利用 go.work 等)的权衡,Go 团队最终采纳了在 go.mod 文件中添加 ignore 指令的方案。
2025-05-22 21:02:04
938
原创 权威认证:Go核心密码学库通过独立安全审计
的默认启用)及控制方式。对于需要长期数据保密性的项目,应审慎评估并开始应用这些新特性,同时关注 Go 在 PQC 领域的后续发展(如对 ML-DSA 签名算法的支持)以及规划中的易用性 API(如密码哈希 API)。审计结果的积极性,结合 Go 1.24 在 PQC 和 FIPS 合规性方面的重大进展,无疑为 Go 开发者提供了更强大的信心和更先进的工具来构建安全的应用程序。未来规划中更易用的高层密码学 API,如简化的密码哈希接口,将进一步降低安全开发的门槛,帮助开发者构建更加健壮和面向未来的系统。
2025-05-21 12:29:30
928
原创 未雨绸缪:Go开发者需要了解的后量子密码学与实现现状
Go 语言正积极拥抱后量子密码学 (PQC) 时代,Go 1.24 将 crypto/mlkem 纳入标准库并通过 crypto/tls 默认启用 X25519MLKEM768 混合密钥交换,这为 Go 开发者带来了技术领先和安全增强的机遇,但也伴随着 API 演进、行业经验不足及资源消耗等挑战。经过多轮评审,几种优胜算法逐渐浮出水面,为未来的安全通信提供了希望。crypto/mlkem 包的加入,使得 Go 开发者可以直接在应用层使用标准化的后量子密钥封装机制,为构建面向未来的安全应用提供了坚实的基础。
2025-05-20 08:04:19
932
原创 原子操作的瓶颈与Go的多核扩展性之痛:深入剖析sync.ShardedValue及per-CPU提案
从 valyala 对原子操作性能的“叹息”,到 jonhoo/drwmutex 的巧妙实践,再到 Go 社区围绕 sync.ShardedValue、sync.PLocalCache、sync.MLocal 等提案的深入探讨,我们看到了 Go 语言在追求极致性能道路上永不停歇的脚步。有趣的是,其性能图表还揭示了 NUMA (Non-Uniform Memory Access) 效应的影响——在测试机器上每增加一个包含 10 个核心的 NUMA 节点,跨核心流量的成本就会增加,导致性能曲线出现波动。
2025-05-19 08:03:21
757
原创 Java屹立30年,Go的“少年壮志”如何续写辉煌?——来自Java之父的“长寿秘诀”
虽然很多“名言警句”(比如他对某些公司文化的吐槽,或者对过时工具的调侃)非常抓人眼球,但其背后对技术本质的坚守、对用户价值的尊重、以及对行业趋势的冷静洞察,或许才是 Java 能够穿越周期、屹立 30 年的深层原因。从最初备受瞩目的“Google语言”,到如今在云原生、微服务领域独当一面,Go 凭借其简洁、高效与强大的并发能力,赢得了全球开发者的青睐,正从一个朝气蓬勃的少年”迈向更加成熟稳健的“壮年”。Go 语言,这位“刚刚十多岁的少年”,正处在发展的黄金时期,也面临着成长的关键抉择。
2025-05-17 08:16:10
592
原创 揭秘Go语言中的rune:一段跨越30年的Plan 9往事与UTF-8的诞生传奇
是的,你没看错,rune 的故事,始于 Plan 9,那个由贝尔实验室传奇人物们(包括 Rob Pike, Ken Thompson 等)创造的操作系统。通过Rob Pike的亲自确认,我们应该知道,当我们今天再看到 Go 语言中的 rune 时,它不仅仅是为了“简洁”而对“Unicode code point”的替换。Connor 的文章中引用了一封 Rob Pike 在 2003 年的邮件,详细披露了这段鲜为人知的历史,纠正了“IBM 设计 UTF-8,Plan 9 实现它”的说法。
2025-05-16 08:03:34
624
原创 手把手带你玩转GOEXPERIMENT=jsonv2:Go下一代JSON库初探
v1 在反序列化时,JSON 对象中的字段名与 Go 结构体字段的 JSON Tag 或字段名进行匹配时,采用的是大小写不敏感的策略。从更严格的 JSON 规范遵循(如重复键报错、大小写敏感),到更灵活的特性支持(如自定义时间格式、omitzero、inline、unknown 字段),再到底层解析性能的显著提升,json/v2 无疑承载了 Go 社区对于下一代标准库 JSON 包的厚望。当输入的 JSON 对象包含重复的键名时,v1 的行为是不确定的(通常是后者覆盖前者),并且不会报错。
2025-05-15 08:03:47
1009
原创 从Go路由选择看“标准库优先”:何时坚守?何时拓展?
Alex Edwards 也提到 http.ServeMux 的一个聪明之处在于其处理重叠路由的逻辑——“最精确匹配的路由胜出”(例如 /post/edit 会优先于 /post/{id})。为什么“标准库优先”如此有吸引力?如果引入第三方库能让你用更少的代码、更清晰的逻辑实现复杂功能,或者能显著改善开发体验,并且团队愿意承担学习和维护这个新依赖的成本,那么拓展就是合理的。简单来说,如果标准库的功能已经能满足你 80% 的需求,且剩余 20% 可以通过简单的封装或组合模式解决,那么坚守标准库通常是明智的。
2025-05-14 22:00:00
545
原创 当“贝尔实验室的余晖”遇上“AI浪潮”:从Ian Taylor离职看Go的未来之路与基金会的可能性
Hacker News 和 Reddit 上的讨论热度空前,惋惜、赞扬与对未来的种种猜测交织在一起,也为我们提供了更丰富的视角去解读这一事件,特别是关于 Go 对 Google 的依赖以及未来独立发展的可能性。这无疑是Go社区的一大损失,但更像是一个时代的注脚和新篇章的序曲。这些“信号”都指向一个现实:当一家公司(即使是 Google 这样的技术巨头)全力押注一个方向(如 AI)时,其他领域,即使是像 Go 这样已经取得巨大成功的项目,也可能面临资源、优先级和内部“影响力”评估标准的变化。
2025-05-14 08:00:44
827
原创 Go运行时底层接口标准化?“GOOS=none”欲为Go铺设通往裸金属、固件和微控制器的桥梁
它可以为库作者提供统一的方式来编写可在有 OS 和无 OS 环境下工作的代码,同时为未来可能出现的针对特定微控制器的、基于 GOOS=none 接口的更深度定制工作提供基础,尽管这可能需要超出本提案范围的额外修改。然而,这套接口能否以及如何实现“标准化”,并融入 Go 的兼容性承诺,成为了社区热议的焦点。像 nanotime1 这样在运行时关键路径上调用的函数,必须满足极其严格的条件(无栈增长、无分配、无写屏障),这进一步限制了使用 Go 实现的灵活性,使得汇编成为更可靠的选择。但它的潜力远不止于此。
2025-05-13 08:01:10
688
原创 Go社区的“轻框架”理念:自由的馈赠还是无形的枷锁?
因为没有现成的、整合好的框架提供“全家桶”服务,团队在面对常见需求(如用户认证、权限管理、任务队列)时,更容易倾向于“自己动手,丰衣足食”,这可能导致大量功能相似但实现各异的内部“准轮子”,长期维护成本高昂。在 Go 的世界里,真正的自由,或许并非随心所欲,而是通过团队的共同智慧和高度自律,构建起一套虽“轻”却不失章法的“隐形框架”,从而在享受简洁与高效的同时,也能保障项目的稳健、协作的顺畅与长远的发展。关键在于如何在享受其“轻盈”与“自由”的同时,有意识地为团队引入必要的“结构”与“秩序”:。
2025-05-12 22:28:38
533
原创 从线下到线上,我的“Go语言进阶课”终于在极客时间与大家见面了!
至今还清晰记得,在滴滴的一个会议室里,我与一群对 Go 语言充满热忱的开发者们,共同探讨、深入剖析了 Go 进阶之路上的种种挑战与关键技能。同年,我还临危受命,在 GopherChina 2023 上加了一场 “The State Of Go” 的演讲,与大家分享了我对 Go 语言发展趋势的观察与思考。在课程中,你不仅能学到 Go 的高级特性和用法,更能体会到 Go 语言“组合优于继承”、“显式错误处理”等设计哲学的精髓,以及在大模型时代如何让 AI 赋能你的 Go 应用。
2025-05-12 08:01:03
754
原创 Go语言进入“后元老时代”?Ian Lance Taylor离职引发的思考:传承、创新与社区
如果我们将 Go 的早期核心开发者(如 Rob Pike, Ken Thompson, Robert Griesemer, Russ Cox, Ian Lance Taylor 等)视为“元老”,那么随着时间的推移和人员的变动,Go 语言是否正在进入一个由新一代核心开发者主导,更加依赖成熟流程和广大社区贡献的“后元老时代”?他的离开,不仅仅是一位资深工程师的职业变动,更像是一个时代的注脚,引发我们对 Go 语言发展阶段、团队演进以及开源项目生命力的深层思考。这不是一个时代的结束,而更像是一个新篇章的序曲。
2025-05-11 18:00:00
999
原创 Go包维护者必读:如何让你的Go包更易被发现、文档更专业?
pkg.go.dev 的数据来源于官方的 Go Module Proxy (proxy.golang.org),并通过 Go Module Index (index.golang.org) 定期监测新的包版本。v0.x.y 版本的项目被认为是实验性的。访问你的包在 pkg.go.dev 上对应的 URL (即使它显示“Not Found”),例如 https://pkg.go.dev/example.com/my/module,然后点击页面上的 “Request” 按钮(如下图所示)。来隐藏所有版本文档。
2025-05-11 08:03:33
799
原创 百万行依赖的“恐惧”:一位Rust开发者的深度反思与Go的启示
更重要的是,正如Hacker News上一些开发者强调的,依赖的真正“恐惧”更多在于供应链安全和代码的可审查性。Hacker News社区的讨论中,有开发者(如kion)指出,现代软件开发中‘库叠库’的现象十分普遍,每一层依赖可能只用到其功能的冰山一角,但最终却可能导致简单的应用膨胀到数百MB。无论是语言特性(如Go的build tags、Rust的features)、包管理工具(如更智能的tree shaking),还是库本身的模块化设计,都应朝着让开发者能更精细控制最终产物的方向努力。
2025-05-10 09:26:45
825
原创 GitHub英语沟通太难?别让语言成为你参与顶级Go项目的拦路虎!
面对 GitHub Issues 中形形色色的沟通场景——从报告一个恼人的 Bug,到提出一个颠覆性的改进方案,再到与全球开发者唇枪舌战——掌握一些行之有效的沟通“套路”或“模式”,能让你事半功倍。熟练掌握了这些沟通“招式”,就像习武之人有了套路,但要真正做到运用自如、出神入化,还需要打磨“内功”——也就是我们的语言基本功和一些约定俗成的表达。如今,在ChatGPT、DeepSeek、Google Gemini等AI工具的辅助下,我们可以更自信地表达,但理解Github上的沟通的“套路”和文化依然重要。
2025-05-09 08:00:13
1045
原创 Go 1.25链接器提速、执行文件瘦身:DWARF 5调试信息格式升级终落地
即便经过压缩,它们也能占到可执行文件大小的相当一部分(例如,当时 go 二进制的 12MiB 中占 6%)。DWARF 5 引入了如 .debug_addr, .debug_rnglists, .debug_loclists 等新 Section 格式,它们的设计能大幅减少甚至消除对重定位的需求,从而减轻链接器负担。新的列表格式 (.debug_rnglists, .debug_loclists) 比旧的 (.debug_ranges, .debug_loc) 更为紧凑,有助于减小调试信息的大小。
2025-05-08 08:00:29
749
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人