20250508
每日一谚:Test edge cases and boundary conditions
Go 1.25链接器提速、执行文件瘦身:DWARF 5调试信息格式升级终落地
经过长达六年的讨论、等待生态成熟和密集的开发工作,Go 语言工具链终于在主干分支(预计将包含在 Go 1.25 中)默认启用了 DWARF version 5 作为其调试信息的标准格式(Issue #26379)。这一看似“幕后”的变更,实则为 Go 开发者带来了切实的链接速度提升和可执 行文件体积的优化
为什么具体错误类型优于哨兵错误
本文探讨了 Go 语言中具体错误类型与哨兵错误的优劣。具体错误类型在性能、不可篡改性和可扩展性方面优于哨兵错误。文章还介绍了第三方函数 errutil.Find,它作为标准库函数 errors.As 的强大替代方案。
构建你自己的ResponseWriter:Go语言中更安全的HTTP
Go语言的`http.ResponseWriter`直接写入套接字,这可能导致一些难以察觉的错误,例如忘记设置状态码或过晚修改标头。本文解释如何编写你自己的防御性ResponseWriter,通过包装ResponseWriter来强制执行自定义规则,例如要求使用`WriteHeader()`并在错误后阻止写入,从而使你的处理程序更安全、更容易理解。文章还通过示例代码演示了如何避免常见的HTTP处理程序错误,并提供了解决方案。
掌握 Go 并发模式:管道、广播和取消
Go 的并发原语是其最强大的功能之一,允许开发人员构建高效、可扩展的系统。本文扩展了 go.dev 博客文章(“Go 并发模式:管道和取消”)中的概念,并提供了用于更复杂现实场景的实用模式,涵盖了管道、扇出扇入模式、使用 context 进行显式取消、使用 worker pool 进行边界并行、结合 errgroup 进行错误处理、广播系统构建以及使用 goleak 避免内存泄漏等方面,并总结了 Go 并发模式的最佳实践。
使用Go并发进行大规模批量图像转换
为了加快产品上市速度,很容易忽略一些看似微小的细节,但这些细节最终可能会造成很大的影响。在推出Vectopus.com这个多供应商矢量图像市场时,我们忽略了WebP图像的支持。这导致我们需要追溯性地将50万多个SVG文件转换为WebP格式。文章比较了Node.js、Python和Go三种语言的并发模型,并最终选择Go语言构建命令行界面工具来高效地完成这项任务,因为它具有高效的并发模型和轻量级的goroutine,从而实现了高并发和快速的处理速度。
Go 不信奉框架,但团队仍然需要它们
Go 语言的简洁性对于需要约定和结构来提高工作效率的团队来说可能是一种负担。了解 Encore 等框架如何提供帮助。
Odin:一种具有 Go 风格的实用 C 替代语言
Odin 是一种由 Bill “gingerBill” Hall 编写的通用系统编程语言。它旨在成为 C 的现代替代方案,在不牺牲对底层细节控制的情况下,强调简洁性、性能和可读性。Odin 具有数据导向的特点,内置动态映射和数组等特性。它采用实用主义的设计哲学,提供许多开箱即用的功能,并具有对各种常用库的绑定。虽然错误处理使用 Go 风格的多返回值,可能感觉笨拙,但总体而言,Odin 易于学习和使用,并受到开发者的积极评价,认为它提升了编程的乐趣,并减少了内存错误。与 Jai 和 Zig 等语言相比,Odin 在语法上与 Jai 类似,但更注重简洁性和开箱即用的功能,而不是元编程。与 Zig 相比,Odin 更注重开发者体验,语法更简洁直接。Odin 的不足之处在于文档尚不完善,主要社区平台为 Discord。
Kubernetes外科医生手册:从etcd快照中精确恢复
本指南将引导您完成从etcd快照中精确恢复资源的过程,而无需触发完整的集群恢复。无论您是在排查意外删除问题还是进行取证调试,这种轻量级且有针对性的方法都能最大限度地减少停机时间。
Kubernetes v1.33:从 Secrets 到 Service Account:Kubernetes 镜像拉取的演变
Kubernetes 一直在不断发展,以减少对存储在 API 中的长期有效凭据的依赖。此转变的一个主要例子是 Kubernetes 服务帐户 (KSA) 令牌从长期有效的静态令牌转变为具有 OpenID Connect (OIDC) 兼容语义的短暂的、自动轮换的令牌。这一进步使工作负载能够安全地与外部服务进行身份验证,而无需持久性密钥。然而,一个主要差距仍然存在:镜像拉取身份验证。目前,Kubernetes 集群依赖于存储在 API 中的镜像拉取密钥,这些密钥是长期有效的并且难以轮换,或者依赖于节点级的 kubelet 凭据提供程序,这允许在节点上运行的任何 Pod 访问相同的凭据。为了解决这个问题,Kubernetes 引入了用于 Kubelet 凭据提供程序的服务帐户令牌集成,目前处于 alpha 阶段。此增强功能允许凭据提供程序使用特定于 Pod 的服务帐户令牌来获取注册表凭据,然后 kubelet 可以将其用于镜像拉取,从而无需长期有效的镜像拉取密钥。
VictoriaLogs:用于 AWS VPC 流日志的 Grafana 仪表板——从 Grafana Loki 迁移
本文介绍了如何使用 VictoriaLogs 创建一个 Grafana 仪表板来显示 AWS VPC 流日志,并从 Grafana Loki 迁移查询。文章首先展示了使用 Terraform 创建 S3 存储桶、AWS Lambda 和 Promtail 的代码,然后创建了一个新的 Grafana 仪表板,并演示了如何将 Loki 的 LogQL 查询迁移到 VictoriaLogs 的 LogsQL 查询。文章还比较了 Loki 和 VictoriaLogs 的性能,并讨论了未来的改进方向,例如使用 vector.dev 来收集日志并进行转换。
继承的诞生:一个性能优化技巧
Simula语言发明继承的初衷是为了支持侵入式列表、节省内存并简化垃圾回收器。Simula当时的垃圾回收机制非常简单,为了解决由此带来的问题,例如对象访问已失效数据,他们禁止了多种参数传递方式,包括函数作为参数,这限制了语言的表达能力。为了简化侵入式列表的使用,Simula引入了继承机制,使对象可以直接继承侵入式列表节点,从而有效提升性能。文章最后指出,虽然继承最初是为了性能优化,但如今人们更多地关注其代码复用和扩展性方面的好处,作者本人更倾向于组合和模块。
Prometheus监控:即时查询和范围查询详解
本文探讨了Prometheus监控中的即时向量和范围向量查询。即时向量提供当前快照,而范围向量提供一段时间内的多个值。文章解释了它们的工作原理,并阐述了瞬时查询和范围查询的概念、瞬时向量和范围向量的区别,以及lookback delta(回溯增量)、step(步长)和window(窗口)等时间因素在查询中的作用。
Ashley Willis 的引言
这篇博文引用了 Ashley Willis 关于“氛围式编程”(vibe coding)对早期职业开发者的影响的观点。Willis 提到,她曾担心这种编程方式可能会减少开发者从调试错误教程中学习的机会,而这种学习方式让她理解了代码的构成方式。然而,一位导师指出,调试 AI 生成的代码类似于处理遗留代码库,这对于许多开发者来说都是常见的工作。
Anthropic API 推出网页搜索功能
Anthropic 宣布在其 Anthropic API 中推出网页搜索功能,使 Claude 能够访问来自网络的最新信息。开发人员现在可以使用这项功能构建 Claude 驱动的应用程序和代理,从而提供最新的见解。该功能支持多种用例,包括金融服务、法律研究、开发者工具和生产力工具,并提供来源引用以确保信息准确性和可追溯性。此外,管理员可以通过允许/阻止域名列表以及组织级管理来控制搜索范围。
批判性地看待 MCP - Raz 博客
本文批判性地分析了模型上下文协议 (MCP)。作者认为,MCP 的 HTTP 传输协议(SSE+HTTP 和可流式 HTTP)设计存在缺陷,建议使用 WebSockets 替代。文章详细阐述了作者在使用 MCP 过程中的遇到的问题,包括文档不足、缺乏成熟的工程实践以及安全隐患等。作者认为,目前涌现的多个类似协议(例如 IBM 的 ACP 和 Google 的 A2A)存在冗余,大部分功能可以通过改进 MCP 来实现。
AI正在让开发者变得懒惰:核心编程技能的终结?
AI 辅助编程工具的普及,提高了开发效率,但也带来了过度依赖的风险。文章探讨了盲目信任 AI 工具的潜在陷阱,以及对开发者核心技能的潜在损害。作者认为,AI 应作为辅助工具,而非替代品,开发者应保持对核心技能的重视,并批判性地评估 AI 生成的代码,以避免引入错误和安全漏洞。
使用大型语言模型:一些经验教训
本文作者分享了在大型语言模型(LLM)应用中的一些经验教训,主要包括:LLM 的结果无法完美验证,需要建立评估框架和人工干预流程;LLM 的调用次数和误差率之间存在帕累托最优解,需要根据具体任务进行学习和调整;LLM 应用的开发缺乏可预测性,需要反复试验;构建面向未来的 LLM 应用几乎不可能,需要快速迭代;LLM 应用的经济效益会因其独特的成本结构而发生显著变化。
GoogleCloudPlatform/kubectl-ai
AI powered Kubernetes Assistant
rzane/docker2exe
Convert a Docker image to an executable
argoproj/argo-cd
Declarative Continuous Deployment for Kubernetes
gorilla/websocket
Package gorilla/websocket is a fast, well-tested and widely used WebSocket implementation for Go.
mailru/easyjson
Fast JSON serializer for golang.
rclone/rclone
"rsync for cloud storage" - Google Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Wasabi, Google Cloud Storage, Azure Blob, Azure Files, Yandex Files
hashicorp/terraform-provider-aws
The AWS Provider enables Terraform to manage AWS resources.
hookdeck/outpost
Open Source Outbound Webhooks and Event Destinations Infrastructure
zeromicro/go-zero
A cloud-native Go microservices framework with cli tool for productivity.
golang/go
The Go programming language
heroiclabs/nakama
Distributed server for social and realtime games and apps.
VictoriaMetrics/VictoriaMetrics
VictoriaMetrics: fast, cost-effective monitoring solution and time series database
grafana/alloy
OpenTelemetry Collector distribution with programmable pipelines
golang-migrate/migrate
Database migrations. CLI and Golang library.
infracost/infracost
Cloud cost estimates for Terraform in pull requests💰📉 Shift FinOps Left!
NVIDIA/nvidia-container-toolkit
Build and run containers leveraging NVIDIA GPUs
milvus-io/milvus
Milvus is a high-performance, cloud-native vector database built for scalable vector ANN search
cloudwego/eino
The ultimate LLM/AI application development framework in Golang.
ollama/ollama
Get up and running with Llama 3.3, DeepSeek-R1, Phi-4, Gemma 3, Mistral Small 3.1 and other large language models.
gruntwork-io/terragrunt
Terragrunt is a flexible orchestration tool that allows Infrastructure as Code written in OpenTofu/Terraform to scale.
ethereum/go-ethereum
Go implementation of the Ethereum protocol
ray-project/kuberay
A toolkit to run Ray applications on Kubernetes
编辑:Tony Bai
编辑主页:tonybai.com
GopherDaily项目:github.com/bigwhite/gopherdaily
Copyright 2019-2024 GopherDaily