- 线上 API 被脚本刷爆是后端常见的头疼事。本文用 Go+Gin 实现一个令牌桶限流中间件,从原理到代码到压测,手把手带你给接口加一层保护壳。 线上 API 被脚本刷爆是后端常见的头疼事。本文用 Go+Gin 实现一个令牌桶限流中间件,从原理到代码到压测,手把手带你给接口加一层保护壳。
- Go 在后端圈火起来,很大程度靠"并发写起来便宜"。聊聊 goroutine 怎么做到轻量、channel 怎么代替锁来做通信,以及一个用 WaitGroup 等所有任务结束的最小可跑例子。 Go 在后端圈火起来,很大程度靠"并发写起来便宜"。聊聊 goroutine 怎么做到轻量、channel 怎么代替锁来做通信,以及一个用 WaitGroup 等所有任务结束的最小可跑例子。
- Go 1.27.0 在语言、工具链、运行时以及标准库方面都有不少改进,并带来了泛型方法、结构体字面量字段初始化增强、函数类型推断能力增强以及小对象内存分配优化等重要变化。 Go 1.27.0 在语言、工具链、运行时以及标准库方面都有不少改进,并带来了泛型方法、结构体字面量字段初始化增强、函数类型推断能力增强以及小对象内存分配优化等重要变化。
- Go 1.26.0 在语言、工具链、运行时、编译器以及标准库方面都有不少改进,并带来了 new 内置函数增强、泛型约束放宽、go fix 重构以及 Green Tea GC 默认启用等重要变化。 此次更新不仅进一步提升了语言表达能力和工具链体验,也在运行时性能方面继续优化,例如降低 GC 开销、减少 cgo 调用成本,并让切片底层存储在更多场景下可以分配到栈上。 Go 1.26.0 在语言、工具链、运行时、编译器以及标准库方面都有不少改进,并带来了 new 内置函数增强、泛型约束放宽、go fix 重构以及 Green Tea GC 默认启用等重要变化。 此次更新不仅进一步提升了语言表达能力和工具链体验,也在运行时性能方面继续优化,例如降低 GC 开销、减少 cgo 调用成本,并让切片底层存储在更多场景下可以分配到栈上。
- 在 Go 语言中,for range 遍历通道是一个极其常见的模式。然而,正是这个看似无害的语法糖,在生产环境中埋下了一种隐晦的 goroutine 泄漏陷阱。最近,我在调试一个自研的工具时,就再次掉进了这个“经典的坑”。for range 遍历通道看起来非常优雅,但它隐藏着一个很容易踩的坑:如果通道没有关闭,for range 会永远阻塞,导致 goroutine 泄漏。下面我用一个你能立... 在 Go 语言中,for range 遍历通道是一个极其常见的模式。然而,正是这个看似无害的语法糖,在生产环境中埋下了一种隐晦的 goroutine 泄漏陷阱。最近,我在调试一个自研的工具时,就再次掉进了这个“经典的坑”。for range 遍历通道看起来非常优雅,但它隐藏着一个很容易踩的坑:如果通道没有关闭,for range 会永远阻塞,导致 goroutine 泄漏。下面我用一个你能立...
- 簡單寫下cli的使用先下載:MetaMessage 改個名,方便使用:mv mm_0.1.8_darwin_arm64 mm一個簡單的jsonc:cat input.jsonc { "a":2,}序列化:./mm -e -i input.jsonc -o output.mmEncoding Mode, Input: input.jsonc, Output: output.mm看下大小:... 簡單寫下cli的使用先下載:MetaMessage 改個名,方便使用:mv mm_0.1.8_darwin_arm64 mm一個簡單的jsonc:cat input.jsonc { "a":2,}序列化:./mm -e -i input.jsonc -o output.mmEncoding Mode, Input: input.jsonc, Output: output.mm看下大小:...
- 第一次在 Zed 里给 Go 代码打断点,我习惯性按了 F9,然后……什么都没发生。不是报错,不是弹窗,就是纯粹的"空气安静"。那一刻我意识到:这个快得像闪电的编辑器,在调试这件事上,还像个刚学会走路的婴儿。直到我发现了这个叫 zed-go-debug 的zed 插件。简单说,它给 Zed 装上了"调试大脑"——不是简单调用 dlv,而是把 GoLand 那套丝滑的调试体验,用 Rust 重... 第一次在 Zed 里给 Go 代码打断点,我习惯性按了 F9,然后……什么都没发生。不是报错,不是弹窗,就是纯粹的"空气安静"。那一刻我意识到:这个快得像闪电的编辑器,在调试这件事上,还像个刚学会走路的婴儿。直到我发现了这个叫 zed-go-debug 的zed 插件。简单说,它给 Zed 装上了"调试大脑"——不是简单调用 dlv,而是把 GoLand 那套丝滑的调试体验,用 Rust 重...
- MetaMessage(mm)是一個結構化數據交換協議。自描述、自約束、自示例,實現了無損數據交換,是一種原生適配 AI + 人類 + 機器的下一代通用協議。 在golang中,使用mm非常簡單。 MetaMessage(mm)是一個結構化數據交換協議。自描述、自約束、自示例,實現了無損數據交換,是一種原生適配 AI + 人類 + 機器的下一代通用協議。 在golang中,使用mm非常簡單。
- 深夜三点,我又在 go.mod 里敲下 github.com/google/uuid,突然愣住:这包我用了八百个项目了,咋还没进标准库?没错,那个被 11 万+ Go 项目偷偷依赖的 UUID 包,终于要"转正"了。Issue #62026 从 2023 年吵到 2026 年,提案组终于拍板:Go 1.27 将原生支持 uuid 包。 新包长啥样?简洁到让你怀疑人生package uuidi... 深夜三点,我又在 go.mod 里敲下 github.com/google/uuid,突然愣住:这包我用了八百个项目了,咋还没进标准库?没错,那个被 11 万+ Go 项目偷偷依赖的 UUID 包,终于要"转正"了。Issue #62026 从 2023 年吵到 2026 年,提案组终于拍板:Go 1.27 将原生支持 uuid 包。 新包长啥样?简洁到让你怀疑人生package uuidi...
- 📌 一句话剧透:parser=encoding.TextUnmarshaler 让 Gin 的绑定功能终于"开窍"了! 🎬 痛点小剧场以前用 Gin 绑定自定义类型,是不是这样写的?👇// ❌ 老写法:手动解析 + 重复造轮子type Birthday stringfunc (b *Birthday) FromString(s string) error { // 自己写解析逻辑... 📌 一句话剧透:parser=encoding.TextUnmarshaler 让 Gin 的绑定功能终于"开窍"了! 🎬 痛点小剧场以前用 Gin 绑定自定义类型,是不是这样写的?👇// ❌ 老写法:手动解析 + 重复造轮子type Birthday stringfunc (b *Birthday) FromString(s string) error { // 自己写解析逻辑...
- 写Go还在手动NewXXX(db, logger, config)?NVIDIA悄悄开源了这个零依赖的DI容器,看完直呼:早该这样了! 🔍 gontainer 是什么?一句话:用函数签名自动注入依赖的轻量级容器,零外部依赖、零代码生成,纯靠 Go 泛型 + 反射实现。// 以前:手动组装,写到怀疑人生svc := NewUserService( NewDatabase(NewConf... 写Go还在手动NewXXX(db, logger, config)?NVIDIA悄悄开源了这个零依赖的DI容器,看完直呼:早该这样了! 🔍 gontainer 是什么?一句话:用函数签名自动注入依赖的轻量级容器,零外部依赖、零代码生成,纯靠 Go 泛型 + 反射实现。// 以前:手动组装,写到怀疑人生svc := NewUserService( NewDatabase(NewConf...
- 你有没有遇到过这种情况:代码逻辑看起来天衣无缝,跑起来却像个谜语人?在 Go 里,这很可能拜 变量阴影(Variable Shadowing) 所赐。 🎭 什么是 Shadowing?简单说就是「同名覆盖」func lookupSum() (int, error) { result1, err := lookup1() // 外层 err if err != nil { ... 你有没有遇到过这种情况:代码逻辑看起来天衣无缝,跑起来却像个谜语人?在 Go 里,这很可能拜 变量阴影(Variable Shadowing) 所赐。 🎭 什么是 Shadowing?简单说就是「同名覆盖」func lookupSum() (int, error) { result1, err := lookup1() // 外层 err if err != nil { ...
- 📝 一个"偷懒型"开发者的效率秘籍 | ⏱️ 阅读 4 分钟 | ✨ 文档即测试成就解锁 🎬 起因:我又被文档坑了上周写了一个"字符串工具包",想给同事用。打开 pkg.go.dev 一看文档…结果:❌ 示例代码是半年前的;❌ 注释说"返回大写",实际返回小写;❌ 同事照着抄,线上 panic 了。🤦♂️ 那一刻我悟了:文档不跑测试,等于没写。于是我翻出了 Go 的"隐藏技能":可执... 📝 一个"偷懒型"开发者的效率秘籍 | ⏱️ 阅读 4 分钟 | ✨ 文档即测试成就解锁 🎬 起因:我又被文档坑了上周写了一个"字符串工具包",想给同事用。打开 pkg.go.dev 一看文档…结果:❌ 示例代码是半年前的;❌ 注释说"返回大写",实际返回小写;❌ 同事照着抄,线上 panic 了。🤦♂️ 那一刻我悟了:文档不跑测试,等于没写。于是我翻出了 Go 的"隐藏技能":可执...
- 📖 故事开场:凌晨3点,运维群里突然炸锅:“数据库连接池爆了!” 小红揉着惺忪的睡眼打开日志,发现是昨天上线的"小优化"——给每个请求加了个go——正在疯狂创建goroutine。她默默关掉报警,在笔记本上写下:“并发不是魔法,是责任”。 🎯 第一部分:并发避坑指南(经验法则篇) 🚫 法则1:能不用并发,就别用很多新手(包括曾经的我)总觉得:加个go就能变快!但生产环境会教你做人://... 📖 故事开场:凌晨3点,运维群里突然炸锅:“数据库连接池爆了!” 小红揉着惺忪的睡眼打开日志,发现是昨天上线的"小优化"——给每个请求加了个go——正在疯狂创建goroutine。她默默关掉报警,在笔记本上写下:“并发不是魔法,是责任”。 🎯 第一部分:并发避坑指南(经验法则篇) 🚫 法则1:能不用并发,就别用很多新手(包括曾经的我)总觉得:加个go就能变快!但生产环境会教你做人://...
- 💡 一句话总结:匿名结构体 = 临时数据打包神器,用完即走,不占编制! 啥是匿名结构体?普通结构体像"正式员工",得先注册类型:type Car struct { Make string Model string Year int}camry := Car{Make: "Toyota", Model: "Camry", Year: 2020}匿名结构体?直接"外包上岗... 💡 一句话总结:匿名结构体 = 临时数据打包神器,用完即走,不占编制! 啥是匿名结构体?普通结构体像"正式员工",得先注册类型:type Car struct { Make string Model string Year int}camry := Car{Make: "Toyota", Model: "Camry", Year: 2020}匿名结构体?直接"外包上岗...
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签