Building Statically Linked Go Executables with CGO and Ziga year agohttps://calabro.io/zig-cgo解释如何使用Zig创建带有CGO依赖的静态链接Go可执行文件。详细说明如何设置Zig静态库并配置build.zig以实现静态链接。提供一个简单的具有C ABI的Zig函数示例及对应的C头文件。展示调用Zig函数的Go代码,并包含静态链接所需的CGO标志。包含一个用于构建静态链接Go可执行文件的bash命令。通过ldd检查可执行文件来验证静态链接。表达对Go和Zig工具的赞赏,并建议向Zig软件基金会捐款。
Writing an HTTP Server in Go from Scratch: Part 2a year agohttps://www.krayorn.com/posts/http-server-go-2/为服务器启动和请求解析添加了单元测试。修复了请求头大小写不敏感并支持多值的功能。改用流式传输响应而非单次发送完整字符串。通过缓冲区管理优化了大负载数据的处理。为服务器实现了中间件功能。新增了对查询字符串参数的支持。引入子路由器以优化路由组织和中间件应用。
Faster interpreters in Go: Catching up with C++a year agohttps://planetscale.com/blog/faster-interpreters-in-go-catching-up-with-cppVitess用Go语言编写的虚拟机(VM)取代了基于AST的SQL评估引擎,性能达到了与MySQL的C++实现相当的水平。新虚拟机不仅速度更快、更易于维护,而且效率提升了数个数量级。Vitess的评估引擎支持MySQL无法直接执行的复杂SQL表达式,确保了兼容性和准确性。该虚拟机采用语义分析生成的静态类型系统,无需运行时类型检查即可生成专用字节码。独特的基于回调的Go语言虚拟机设计摒弃了传统的switch分发机制,既提升了性能又简化了实现。针对静态类型失效的特殊场景,系统会通过逆向优化回退到AST解释器进行动态类型处理。基准测试显示新虚拟机比原AST解释器快达20倍,在多数场景下与MySQL的C++实现性能相当。虚拟机设计最大限度地减少了内存分配,进一步提升了性能。由于SQL操作的高级特性及已极低的分发开销,系统认为无需采用JIT编译技术。
Unit testing using mocks in Goa year agohttps://golangbot.com/unit-testing-using-mock-go/在无法为测试创建本地环境的情况下(例如使用AWS S3等云服务时),模拟对象对单元测试至关重要在Go语言中,通过接口而非结构体实现模拟测试,从而灵活测试不同场景本文演示了如何重构函数以使用接口进行模拟,从而实现对AWS S3桶创建成功和失败场景的单元测试通过创建实现接口的模拟类型,可以同时模拟成功操作和错误条件,实现全面测试覆盖推荐使用表格驱动测试来高效组织测试用例,便于添加新的测试场景使用github.com/vektra/mockery等库可以自动生成模拟类型,简化测试流程
Iterators in Goa year agohttps://bitfieldconsulting.com/posts/iteratorsGo迭代器是能够逐个产生结果的函数,而非一次性计算所有结果迭代器能提升效率,避免为整个切片分配内存和计算未使用的元素Go中的迭代器函数接收'yield'函数作为参数,通过调用该函数来生成每个值Go的'iter'包提供'Seq'和'Seq2'类型,分别对应单值和双值迭代器迭代器可通过同时返回值和错误来处理异常,类似传统Go函数迭代器必须检查'yield'函数的返回值以确定何时停止并执行清理操作迭代器支持组合,允许函数接收和返回迭代器以实现灵活编程相比通道,迭代器更简单且能避免并发问题和资源泄漏Go标准库已在'slices'和'maps'包中更新支持迭代器功能
Rust is easy? Go is hard?a year agohttps://medium.com/@bryan.hyland32/rust-is-easy-go-is-hard-521383d54c32Rust的枚举比Go的iota解决方案更强大,允许关联数据和运行时可变性Rust的trait提供默认实现并减少样板代码,而Go的接口需要重复编写代码Rust的错误处理更符合人体工学,拥有?操作符和模式匹配等特性,相比Go需要重复的错误检查Go经常需要变通方案来解决语言限制,而Rust的特性是一等公民,减少了hack的需求虽然Go乍看更简单,但Rust的高级特性能带来更好的长期生产力和可维护性
Layered Design in Goa year agohttps://jerf.org/iri/post/2025/go_layered_design/Go语言强制禁止循环包引用,这一规则深刻影响着分层设计Go的分层设计通过导入依赖关系将包组织成有向无环图这种设计是描述性的而非规范性的,本质上是Go导入规则的数学必然结果打破循环依赖可通过功能迁移、创建新包或使用接口实现最小化包的导出符号能有效增强分层设计的实施效果分层设计提倡包可独立使用,这种特性天然适合微服务架构
Cheating the Reaper in Goa year agohttps://mcyoung.xyz/2025/04/21/go-arenas/Go语言的设计决策包括最小化未定义行为和简化垃圾回收(GC)语义。尽管Go具备垃圾回收机制,但仍可通过竞技场分配(arena allocation)等技术实现手动内存管理。Go的垃圾回收采用标记-清除算法,需通过指针位信息来正确管理内存。竞技场分配技术可针对性能进行优化,从而减轻通用内存分配器的压力。本文探讨了在Go中实现自定义竞技场分配器时的挑战与优化策略。Go垃圾回收中的写屏障(write barriers)可能影响性能,文章研究了降低其开销的方法。文末展示了一个完整实现的竞技场分配器,并指出未来可能的优化方向。
Goenums: Type Safe Enum Generator for Goa year agohttps://github.com/zarldev/goenumsGoenums 能够根据Go语言中的简单常量声明生成类型安全的枚举实现。功能包括字符串转换、验证、JSON处理、数据库集成等。支持自定义字段、不区分大小写的解析以及对枚举值的全面处理。与Go的工具链无缝集成,包括支持go:generate指令。输出支持现代Go 1.21+的迭代器功能,并提供向后兼容的备选方案。示例用法包括定义带自定义字段的枚举,以及从多种数据源解析枚举值。
Show HN: Self-Hosted HTTPS Tunnel in 300 LoC with Go, Caddy, and Cloudflarea year agohttps://nexo.sh/posts/building-your-own-https-tunnel/开发了一个轻量级、自托管的HTTP隧道,用于将本地主机转换为公共HTTPS URL。使用Go二进制文件、带通配符TLS的Caddy以及每月0美元的Oracle Cloud虚拟机。类似Ngrok和Cloudflare Tunnel的替代方案存在会话超时和复杂性等限制。功能包括WebSocket隧道、通配符TLS证书和用于直接流的HTTP劫持。设置需要域名、虚拟机和用于构建应用程序的Go环境。使用Cloudflare进行DNS管理和自动SSL证书生成。工程亮点包括用于多路复用的yamux和用于无缝隧道的WebSocket。安全措施包括基本身份验证和限定范围的Cloudflare令牌。未来计划包括支持身份验证、gRPC传输模式和Prometheus指标。
Malicious Go modules that completely wipe out your diska year agohttps://www.neowin.net/news/new-research-exposes-malicious-go-modules-that-total...Socket发现的恶意Go模块可擦除计算机硬盘数据。Go是一种以并发和高性能著称的流行编程语言。Go生态系统缺乏审核模块的中央权威机构,容易遭受误植域名攻击。发现三个使用混淆代码隐藏恶意行为的Go模块。这些模块通过基于数组的字符串混淆技术动态重构命令。恶意代码针对Linux系统,执行下载并运行有害脚本的命令。这些脚本用零值覆盖硬盘数据,导致数据无法恢复。开发者应验证依赖项、检查源代码并使用自动化扫描工具来防范此类攻击。
Runtime: Green tea garbage collector (Go)a year agohttps://github.com/golang/go/issues/73581Green Tea是一种新型并行标记算法,旨在提升内存局部性并降低垃圾回收的CPU开销该算法通过处理更大尺寸的连续内存块(span)而非单个对象,显著改善空间和时间局部性重点优化512字节以内的小对象span,因其每次扫描能获得更高的边际收益采用分布式工作窃取队列优化任务分配,有效降低众核系统上的资源争用单对象扫描优化技术确保稀疏span场景下与现有算法保持性能相当基准测试显示,在GC密集型工作负载中CPU开销降低10-50%,在多核系统上展现更优的扩展性未来计划包括开发SIMD加速扫描内核,以及探索高指针密度场景的集中器网络方案该原型已开放测试,计划作为可选特性纳入Go 1.25版本
Show HN: GoVisual – lightweight, zero-config HTTP request visualizer for Goa year agohttps://github.com/doganarif/govisualGoVisual 是一个轻量级、零配置的 Go Web 应用 HTTP 请求可视化调试工具功能包括实时请求监控、深度检查请求头与请求体、中间件追踪、零配置集成支持 OpenTelemetry 集成以导出遥测数据可通过 `govisual.Wrap` 轻松集成标准 Go HTTP 处理器仪表盘访问地址 `http://localhost:8080/__viz`可配置选项包含请求/响应日志记录、自定义仪表盘路径、存储后端(内存/PostgreSQL/Redis)提供基础用法、OpenTelemetry 集成、多存储后端等示例仪表盘功能包含请求列表、详细请求检查、中间件追踪可视化、实时更新基于 MIT 许可证开源,欢迎贡献代码
Proposal: Add bare metal support to Goa year agohttps://github.com/golang/go/issues/73608关于新增GOOS=none目标的提案,该目标旨在无需操作系统支持即可运行Go运行时环境GOOS=none使得Go应用程序能在裸机环境下运行,所有必要支持均由Go运行时和外部驱动包提供GOOS=none需要的关键功能包括cpuinit、runtime.hwinit、runtime.printk、runtime.initRNG、runtime.getRandomData、runtime.nanotime1及RAM布局变量可选功能包括runtime.Bloc、runtime.Exit、runtime.Idle,以及通过SocketFunc实现的网络I/O设置Go运行时将实现runtime.GetG、runtime.WakeG和runtime.Wake等函数用于中断处理编译流程与标准Go二进制文件类似,加载策略根据硬件差异调整该提案基于TamaGo项目实现,该项目支持AMD64、ARM和RISCV64架构的裸机执行TamaGo现已支持未经修改的Go应用、AMD64 KVM虚拟化执行和UEFI应用程序这些变更具有硬件无关性且跨架构统一,维护成本合理采用GOOS=none可拓展Go在安全操作系统、引导加载程序和微虚拟机等新场景的应用
Hunting down a C memory leak in a Go program (2021)a year agohttps://medium.com/zendesk-engineering/hunting-down-a-c-memory-leak-in-a-go-prog...Zendesk在使用confluent-kafka-go库的Go程序中遇到内存泄漏问题,该库基于C语言库librdkafka构建。初步调查通过分析内存指标确认泄漏发生在程序的C语言部分,而非Go代码。使用jemalloc等工具确认泄漏源于实际内存分配,而非内存碎片或内核问题。尝试使用Valgrind但未能识别泄漏,因为内存在程序终止前被释放,掩盖了问题。采用eBPF和bpftrace工具在运行时动态追踪内存分配并识别泄漏点。通过对librdkafka进行定制修改(包括添加USDT探针),实现了bpftrace的有效追踪。最终定位到泄漏源于librdkafka中未处理的OffsetCommitResponse事件,导致队列无限增长。通过简单修复——消费并丢弃这些事件,解决了内存泄漏问题。该过程为团队提供了关于librdkafka和eBPF工具的宝贵经验,显著提升了调试能力。
Leak and Seek a Go Runtime Mysterya year agohttps://cyolo.io/blog/leak-and-seek-a-go-runtime-mystery客户成功团队报告了一个内存泄漏问题,导致大客户出现严重性能问题。初步调查排除了goroutine泄漏的可能性,根据堆内存分析指向了SQLite3驱动内部的问题。团队怀疑Go运行时的finalizer可能导致循环引用,但详细检查后未发现此类依赖关系。深入调试表明可能是Go运行时的bug,特别是finalizer协程被阻塞的情况。通过goref工具确认存活对象并未引用泄漏数据,再次指向运行时问题。根本原因被定位为go-smb2包中的阻塞性bug,该bug导致finalizer协程被卡住。调试中发现异常现象:某些调试样本中缺失mfinal.go的跟踪信息,该问题已向Go团队提交报告。团队实施了实时监控方案,通过Grafana可视化检测被阻塞的finalizer。本次调查凸显了持久性、团队协作在解决复杂技术问题中的重要性。相关发现已贡献给Go社区,包括关于运行时改进和调试修复的讨论。
Cogentcore: Open-source framework for building multi-platform apps with Goa year agohttps://github.com/cogentcore/coreCogent Core 是一个免费开源的框架,用于构建2D和3D应用程序。它支持多平台开发,包括macOS、Windows、Linux、iOS、Android和网页端,仅需一套Go代码库即可实现。该框架遵循'一次编写,随处运行'(Core)的核心原则。Cogent Core 官方网站提供了详尽的文档和交互式示例。其网站本身就是一个基于wasm技术在网页端运行的Cogent Core应用。在使用Cogent Core进行开发前,必须完成环境安装配置。特别感谢October Swimmer等赞助商对Cogent Core改进工作的支持。
Too Much Go Misdirectiona year agohttps://flak.tedunangst.com/post/too-much-go-misdirectionGo语言的io.Reader接口通常用于流式数据传输,但有时需要直接访问字节数据作者发现当需要直接从io.Reader获取字节数据时效率低下,尤其是使用libavif和libheif这类库时尝试通过类型断言和unsafe.Pointer直接访问bytes.Reader中的字节数据作为解决方案image.Decode函数会将没有Peek方法的读取器包装成bufio.Reader,使问题复杂化进一步的解决方案涉及解包bufio.Reader以访问底层的bytes.Reader作者批评Go语言的结构化类型和标准库实践形成了未文档化的'影子API'作者反思了Go语言这类设计选择带来的更广泛影响
Kelp – simple replacement for homebrew on macOSa year agohttps://github.com/crhuber/kelpKelp是一个基于Go语言的替代Homebrew的工具,用于在MacOS上安装二进制软件包。主要特性包括:无需等待Homebrew配方更新、通过单一安装清单实现多台电脑批量部署、即将支持批量安装多个软件包。基础命令包含:`kelp doctor`系统检查、`kelp init`初始化、`kelp add`添加软件包、`kelp install`执行安装。支持通过`-r`标志指定版本号,通过`kelp update`实现自动更新。将GitHub发布的软件包下载至`~/.kelp/bin`目录,使用`~/.kelp/kelp.json`配置文件。可直接通过HTTP链接添加二进制文件。内置实用工具如`kelp inspect`查看缓存和二进制目录、`kelp doctor`验证二进制文件完整性。通过`GITHUB_TOKEN`环境变量支持GitHub令牌认证。该项目专注于个人工作流优化,功能请求可能不会优先处理。
Go Cryptography Security Audita year agohttps://go.dev/blog/tob-crypto-auditGo语言的加密包接受了Trail of Bits的安全审计,发现一个低危问题和若干信息性发现。审计范围涵盖密钥交换、数字签名、加密、哈希、密钥派生和认证实现。在不受支持的Go+BoringCrypto集成中发现一个低危内存管理问题,已在Go 1.25中修复。信息性发现包括加密操作中的时序侧信道漏洞,已在Go 1.25中解决。此次审计凸显了Go语言通过简洁性、全面测试和代码可读性来实现安全承诺。未来改进包括原生FIPS 140-3模式、后量子密码学支持以及更易用的高级API。