主页 | Web版 | 订阅 | 归档 | Feed

GopherDaily

2024-11-24

每日一谚:Make your errors clear with fmt.Errorf, don not just leave them bare


Go技术生态

一文搞懂如何在Go包中支持Hash-Based Bisect调试
Russ Cox已经提议将Go团队内部使用的bisect调试神器提升到go标准库中,这个神器就是hash-based bisect,它究竟是什么?为什么在编译器和运行时的调试过程中能发挥巨大作用,提高调试效率和定位精度呢?它和git bisect差别在哪里呢?普通go开发人员是否能利用该利器呢?这篇文章将告诉你!

GoMLX:不使用Python的Go机器学习框架
源文档探讨了如何在不依赖 Python 的情况下在 Go 中实现机器学习 (ML) 模型,并利用 GoMLX(一种用于 ML 的 Go 包,利用 XLA 和 PJRT 在各种硬件上高效执行)。它详细介绍了定位为框架的 GoMLX 如何采用来自 TensorFlow 和 JAX 等流行 Python ML 框架的低级基元,从而能够为各种模型构建计算图,包括用于 CIFAR-10 数据集上图像分类的 CNN。该文档还展示了 GoMLX 在运行 Gemma2(真正的生产级开放式 LLM)中的使用,展示了该软件包直接在 Go 中处理复杂 ML 任务的能力。这种方法消除了对 Python sidecar 流程的需求,简化了 ML 推理与 Go 项目的集成,并利用了主要科技公司在优化这些系统方面的投资。该文档进一步提供了对代码结构和执行流程的见解,强调了在 Go 中使用 GoMLX for ML 的效率和性能优势。

Go泛型是简单的还是不完整的?设计研究
DoltHub 博客上的文章批判性地研究了 Go 中泛型的状态,强调了它们的简单性和感知的不完整性。它首先讨论了 Go 泛型的历史背景,这些泛型是在 1.18 版本中引入的,作为对开发人员需求的响应,尽管有人批评它们没有必要。DoltHub 的作者使用泛型来减少代码重复并提高清晰度和性能,但承认它们也可能导致复杂和不透明的代码。然后,本文提出了一个与数据库索引相关的具体问题,其中需要不同的索引类型(BasicMap、MutableBasicMap、BasicIndex、VectorMap、MutableVectorMap、VectorIndex)及其操作重叠。作者认为泛型可以简化这种情况,但受到 Go 局限性的阻碍,例如缺乏递归类型系统和无法直接表达类型之间的关系。建议的解决方案涉及创建一个充当 Contract 的新类型,定义这些索引类型如何相互关联,这将允许更清晰、更富有表现力地使用泛型。文章最后指出,Go 的泛型可以通过额外的语言功能变得更加强大,从而有可能使代码更简单、更易于维护。

在 Go 中构建弹性 TCP 服务器:使用工作量证明 (PoW) 和 Docker 集成实现 DDoS 保护
本文详细介绍了如何在 Go 中创建弹性 TCP 服务器,旨在通过实施工作量证明 (PoW) 来缓解 DDoS 攻击。该服务器向客户端提供随机报价,要求他们在授予访问权限之前解决计算挑战,从而阻止自动化的大批量攻击。PoW 机制至关重要,因为它迫使客户端花费资源,使大规模攻击变得不切实际。该项目的结构由 PoW、报价管理和业务逻辑的单独模块组成,并利用 Docker 进行容器化,从而增强部署和测试。本文还包括设置项目的说明,包括 Dockerfile 创建和用于自动化的 Makefile。GitHub 上提供了完整的源代码,为构建抵御 DDoS 威胁的安全系统提供了基础。

避免使用 Go init 函数
在这篇文章中,Benjamin Cane 讨论了在 Go 编程中使用 init 函数的陷阱。他认为,在包初始化期间执行的 init 函数通常包含应单独测试的逻辑,例如结构实例化和数据填充。这可能会导致测试错误场景和保持代码可靠性的挑战。Cane 主张完全避免使用 init 函数,建议使用像 New() 这样的构造函数。这篇文章发表在 IT 专业人员平台 ITNEXT 上,强调了编写涵盖各种输入的测试以确保不同结果的重要性,而这种做法在 init 函数中是困难的。Cane 的见解旨在指导开发人员在 Go 中实现更可维护和可测试的代码实践。 (注意:摘要旨在概括文章的关键点,同时保持简洁和连贯。它不包括源文档中的直接引用或特定格式。

云原生技术

零磁盘架构
零磁盘架构概念探讨了使用 Amazon S3 作为主存储解决方案的好处,无需传统存储服务器,并支持可扩展的无服务器数据库。作者讨论了传统耦合架构的局限性,例如垂直扩展约束和 PostgreSQL 等主流数据库缺乏水平可扩展性。通过利用 S3 的持久性、可用性和成本效益,该架构有望解决这些问题,提供既有弹性又可水平扩展的解决方案。本文还谈到了 S3 Express One Zone 在低延迟操作中的潜在用途,以及 Raft 集群作为中间缓存的作用。作者重点介绍了几个使用 S3 或类似对象存储的现有系统,展示了这种方法的实用性和优势。零磁盘架构与 S3 的愿景一致,即一种强大且经济高效的存储解决方案,适用于从 OLTP 到 OLAP 数据库的广泛应用。 (注意:摘要经过精心设计,以封装源文档的关键点,同时保持连贯性并避免冗余。它不包括文档中的直接引用或具体细节,而是提供了所提出的主要概念和论点的概述。

SemVer Is Not About You
The article "SemVer Is Not About You" critiques the common focus on Semantic Versioning (SemVer) from the perspective of library maintainers and consumers, arguing that the true value of SemVer lies in managing transitive dependencies rather than dictating direct upgrade paths. The author emphasizes that SemVer's primary function is to resolve conflicts in dependency trees, allowing for a unified version of a library to be used across different applications. The piece also discusses the implications of major version bumps, which can lead to duplicated libraries in the ecosystem, and the challenges of ensuring compatibility across various projects. Additionally, the article touches on extensions to SemVer, such as the minimal version numbers needed for tooling and the deprecation-then-remove cycle exemplified by Ember 2.0. The author advocates for a descriptivist approach, focusing on how SemVer actually operates in practice, rather than prescriptive rules that may not align with real-world usage. The summary encapsulates the core argument that SemVer's significance is in its role in dependency management, rather than in its direct application to individual projects. (Note: The summary provided is a synthesis of the key points from the source document, capturing the essence of the article's argument about SemVer. It does not include direct quotes or specific examples from the text.)

开源精神:提升团队协作和创新
该文件深入探讨了开源对科技行业内协作、创新和可持续性的变革性影响。它强调了开源软件如何在工程师的贡献驱动下由社区维护,使软件创新民主化,并培养分享和学习的文化。本文强调了工程师参与开源背后的动机,包括修补、社区和追求商业价值。它还讨论了采用开源的公司的战略考虑因素,例如将核心业务逻辑与可重用组件分离,以及管理与长期维护和安全相关的风险。该文件建议在数字化转型期间采用循序渐进的方法,以自上而下的愿景和自下而上的能量为指导。最后,它强调了开源基金会在培育社区和制定协作标准方面的作用,最终推动技术领域的有意义变革和持续贡献。

AI

2025 年使用 AI 构建设计系统
源文档讨论了 AI 对建筑设计系统的变革性影响,重点介绍了使用 AI 驱动的工具(如 Bit 开发的 Hope AI)来简化 UI 组件的创建和管理。它强调了可组合性在设计系统中的重要性,其中更小、定义明确的组件使 AI 能够更好地理解和操作代码。本文档深入探讨了 AI 如何自动执行生成新组件、修改现有组件和测试更改等任务,从而增强协作和效率。它还展示了 Bit 的生态系统,其中包括可以使用 AI 工具进一步完善的预构建设计系统。文章最后强调了 AI 和可组合软件开发之间的协同作用,这使开发人员能够以更少的工作量和更高的精度创建可扩展、可重用且有凝聚力的设计系统。 (注意:摘要经过精心设计,以概括源文档中的关键主题和见解,同时保持简洁和连贯性。它不包括文档中的直接引用或具体问题。

流行工具与项目

tmc/langchaingo
LangChain for Go,用 Go 编写基于 LLM 的程序的最简单方法

yorukot/superfile
非常花哨和现代的终端文件管理器

ollama/ollama
启动并运行 Llama 3.2、Mistral、Gemma 2 和其他大型语言模型。

daytonaio/daytona
开源开发环境管理器。

SagerNet/sing-box
通用代理平台

Melkeydev/go-blueprint
Go-blueprint 允许用户使用流行的框架快速启动一个 Go 项目

jesseduffield/lazydocker
管理所有内容的懒惰方式 docker

XTLS/Xray-core
X射线,渗透一切。也是最好的 v2ray-core,支持 XTLS。完全兼容的配置。

zeromicro/go-zero
一个云原生 Go 微服务框架,带有 cli 工具以提高工作效率。

evcc-io/evcc
太阳能充电 ☀️🚘

superseriousbusiness/gotosocial
快速、有趣、小型的 ActivityPub 服务器。

casdoor/casdoor
开源 UI 优先的身份和访问管理 (IAM)/单点登录 (SSO) 平台,具有支持 OAuth 2.0、OIDC、SAML、CAS、LDAP、SCIM、WebAuthn、TOTP、MFA、Face ID、RADIUS、Google Workspace、Active Directory 和 Kerberos 的 Web UI

DiceDB/dice
DiceDB 是一种符合 Redis 标准、反应式、可扩展、高度可用且针对现代硬件进行了优化的统一缓存。

drakkan/sftpgo
功能齐全且高度可配置的 SFTP、HTTP/S、FTP/S 和 WebDAV 服务器 - S3、Google Cloud Storage、Azure Blob

moby/buildkit
并发、缓存高效且与 Dockerfile 无关的构建器工具包

moonD4rk/HackBrowserData
提取和解密浏览器数据,支持多种数据类型,可在各种操作系统(macOS、Windows、Linux)上运行。

photoprism/photoprism
适用于去中心化 Web 🌈💎✨ 的 AI 驱动的照片应用程序

charmbracelet/huh
构建终端表单和提示 🤷🏻 ♀️

kubernetes/minikube
在本地运行 Kubernetes

cli/cli
GitHub 的官方命令行工具


编辑:Tony Bai

编辑主页:tonybai.com

GopherDaily项目:github.com/bigwhite/gopherdaily

Copyright 2019-2024 GopherDaily