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

GopherDaily

2024-10-06

每日一谚:Reuse existing code and libraries whenever possible


Go技术生态

Go项目中使用Git Submodule,还有这个必要吗?
git submodule大家用过没?有了go module依赖管理后,在Go项目中是否还需要submodule,写了篇短文分析了一下

从细微差别中理解Go中的切片
Phuong Le (@func25) 讨论了 Go 中切片的复杂性,强调虽然它们看起来很简单,但它们的动态特性和处理大小调整的方式对于开发人员来说可能很棘手。这篇文章解释说,Go 中的 slice 不仅仅是动态数组;它们与底层数组具有唯一的关系,这可能会导致意外行为。当两个切片引用相同的底层数组时,一个切片中的更改可能会影响另一个切片,但此链接并不总是一致的。本文为初学者和经验丰富的开发人员提供了指南,帮助他们了解切片的细微差别,包括它们如何增长以及使用它们时的潜在陷阱。

对 Go Reflection 的反思
作者是一位经验丰富的程序员,深入探讨了他们对 Go 的“reflect”包的个人体验,揭示了迷人和谨慎的混合。他们讲述了一个实验,该实验使人们对该软件包的功能和局限性有了更深入的了解,特别是它在误用时会引起恐慌的行为。作者批评了 Go 的 panic 设计决定,认为这是对使用 'reflect' 的强烈威慑,这与他们认为它不适合生产的信念是一致的。他们表达了废除第三反射定律的愿望,倡导修改未导出的字段和方法的能力,他们认为这将增强测试和调试工具。最后,作者得出结论,虽然“反思”是一个强大的工具,但最好在处理它时要格外小心,并清楚地了解其潜在风险。

为什么我使用 TLA+ 而不是 TLA+:第 1 集
Igor Konnov 回顾了他对 TLA+ 的使用,并将其与其他规范语言进行了对比,强调了它与他在模型检查方面的先前知识的一致性。他很欣赏 TLA+ 的明确定义语义、方便的基元集和灵活的逻辑,允许在抽象级别之间轻松切换。Konnov 还强调了 TLA+ 良好的自动化分析水平的重要性,特别是它能够促进随机符号执行以进行错误检测。此外,他还讨论了对 Apalache 模型检查器所做的改进,指出了增强的稳定性以及从递归运算符到折叠的转变。在他的整个经历中,Konnov 与工程师进行了对话,揭示了对 TLA+ 语法及其作为规范语言而不是编程语言的作用的常见误解。

Go 基准测试:Pass by Pointer 真的有影响吗?
本文深入探讨了 Go 语言中按值传递与按指针传递的性能影响,特别是关于大型结构体。它解释了随着结构体大小的增长,按值传递(涉及复制整个结构体)变得越来越低效,从超过 10MB 开始,速度会明显减慢。相反,即使结构体大小增加,通过指针传递(涉及传递结构体的内存地址)也保持高效和稳定。作者强调,对于较小的结构体,按值传递是可以接受的,而对于较大的结构体,建议使用指针传递以节省时间和内存。基准测试和结果以图表形式可视化,从而加强了作者对两种方法之间权衡的见解。

在你的测试套件中使用testcontainers-go和docker-compose
本文提供了有关如何使用 Go、Docker Compose 和 testcontainers-go 包编写端到端测试的全面指南。它首先介绍了这些工具及其相关性,包括 Go 编程语言、Docker 和带有 compose 模块的 testcontainers-go 包。然后,作者深入研究了测试代码的结构,从“docker-compose.yml”文件和“testcontainers-go”设置开始。本文进一步解释了如何使用 'ginkgo' 测试框架在 'Describe' 容器节点中组织和运行测试。最后,作者提供了有关如何使用 'ginkgo' 命令执行测试的实际演示,并讨论了使用 'compose' 模块维护最新 Docker 映像的好处。

如何在 Go 中使用接口
源文档深入讨论了 Go 中接口的使用,对于过渡到 Go 的 Python 程序员来说,这个话题可能具有挑战性。它解释了 Go 中的接口不仅与方法集有关,还与它们所代表的类型有关,侧重于操作而不是数据。本文档澄清了关于 'interface{}' 类型的常见误解,强调它不是任何类型,而是一个没有方法的类型,当确切的类型未知或不重要时使用它。它还解决了接口方法中的指针和值接收器问题,解释了与值接收器不同,具有指针接收器的方法如何访问底层结构的方法。最后,本文档提供了一个使用接口将 HTTP 请求正文解析为结构化数据的实际示例,提倡一种设计,其中每个实体类型都负责自己的解组过程。

关于 Ousterhout 的二分法
讨论围绕着编程语言的普及和对平衡易用性与性能的通用语言的追求。作者质疑为什么有这么多语言,并介绍了 Ousterhout 的二分法,它将生成快速但复杂代码的语言(如 C++)与速度较慢但用户友好的语言(如 Python)进行了对比。然后,作者批评了高级语言的想法,这种语言默认为方便,但允许性能优化,指出高级代码和低级代码之间的转换通常会导致性能损失。然而,他们承认 Rust 的独特地位,尽管它的安全性并且缺乏某些功能,但它通过其设计和社区努力提供了一系列性能优化以及安全性和高性能的潜力。

云原生技术

面向 API 的 AI:AI 辅助 SDK 生成技术
本文深入探讨了 AI 在 API 软件开发工具包 (SDK) 生成过程中的创新但具有挑战性的集成。AI 能够自动执行日常任务,例如解析 API 文档以创建模型和服务,这在提高开发人员的工作效率方面具有显著优势。但是,AI 生成的 SDK 的可靠性受到诸如不确定性(相同的输入可能会产生不一致的输出)和安全漏洞(因为 AI 模型可能会无意中复制有缺陷的代码模式)等问题的阻碍。此外,AI 目前在处理大型代码库和复杂工作流方面的局限性需要一种混合方法,将 AI 的灵活性与确定性代码生成工具相结合。AI 在 SDK 生成中的未来看起来很有希望,可能会集成 Arazzo 等面向工作流的规范,这可能会进一步完善复杂 API 交互的自动化。

OpenTelemetry Traces — 工作原理
Arun Krishnan 阐述了 OpenTelemetry 在为可观测性数据收集提供开源替代方案方面的重要性,重点介绍了它在跟踪数据中的作用。OpenTelemetry 有助于通过 API 和 SDK 收集遥测数据,例如指标、跟踪和日志,这些数据可以通过基于代码的检测或零代码检测来使用。每个跟踪都由跨度组成,跨度是单独的工作单元,携带上下文数据,其中包括跟踪 ID、跨度 ID、跟踪标志、跟踪状态、父跨度 ID、开始时间、结束时间、属性、事件和链接。这些上下文数据对于 OpenTelemetry 连接应用程序内不同代码模块的跨度至关重要,可确保全面了解事务的路径和执行时间。Krishnan 还为那些有兴趣了解有关 OpenTelemetry 和可观测性的更多信息的人提供资源。

开源是我们的 DNA:重申 TiDB 的承诺
该文件是对 TiDB 开源承诺的热情肯定,强调了 TiDB 在公司身份和运营中的基础性作用。TiDB 的旅程始于构建一个社区驱动的开源项目,此后得到了全球数千名开发者的支持。但是,该文件强调了开源社区对某些供应商许可做法转变的日益担忧,这可能会损害开源项目的协作和创新精神。为了响应这些行业变化,也为了感谢开源社区,TiDB 通过 OSSInsight 发起了一项新计划。该计划为 GitHub 上的开源贡献者提供高达 2000 美元的免费 TiDB Cloud Serverless 积分,旨在推动他们的创新并支持 TiDB 和更广泛的开源生态系统的发展。

Vault:在 Kubernetes 上安装最先进的 Secret Manager
Usama Malik 是一位公认的 DevOps.dev 作家,他提供了一篇关于 HashiCorp Vault for Kubernetes 的安装和配置的深刻文章,强调了它在安全、可扩展和自动化密钥管理方面的重要性。本文首先强调了在云原生应用程序中管理密钥的重要性,以及错误处理敏感信息的潜在风险。然后,它介绍了 Vault 作为一个强大的解决方案,提供集中管理、动态密钥和精细访问控制。Malik 指导读者完成在 Kubernetes 上设置 Vault 的过程,详细介绍了使用 Helm 的必要先决条件和步骤。本文强调了 Vault 通过确保敏感数据在动态 Kubernetes 环境中保持安全,在保护应用程序完整性和用户信任方面的价值。

工程领导者继续关注 TestOps – 运营战略
工程领导者越来越关注 TestOps,以在软件开发中保持速度和质量之间的平衡。TestOps 解决了管理测试基础设施的复杂性,尤其是在技术快速发展以及设备和操作系统激增的情况下。通过利用实时指标和客户使用模式,LambdaTest 等平台可以动态更新测试功能以符合客户需求,并优先考虑最相关的配置。这种方法与有针对性的测试和客户遥测分析相结合,可帮助团队高效交付高质量的软件。采用 TestOps 方法和基于云的测试平台对于企业在整个软件开发生命周期中有效管理测试和运营变得至关重要。

AI

数据科学正在消亡吗?这就是为什么它可能会永远改变
Ali Ahmad 的文章深入探讨了数据科学不断发展的前景,质疑该领域是正在衰落还是正在转型。他认为,虽然数据科学并没有消亡,但它正在发生变化,自动化和 AutoML 等 AI 工具减少了对传统数据科学角色的需求。知识的民主化导致了数据科学更加商品化,业务分析师和工程师也精通曾经只有数据科学家才能使用的技术。此外,本文还强调了数据工程日益增长的重要性,以及向将机器学习集成到生产中的全栈和混合角色的转变。最后,预先训练的模型和 AI 服务的使用正在加速 AI 的采用,改变了数据科学项目的处理方式。

使用 GitHub Actions 运行 RSS 到 README 项目的 UV
Jeff Triplett 介绍了一种使用 GitHub Actions 中的 uv 工具来简化运行需要依赖项的 Python 脚本的过程。通过在工作流中合并 setup-uv 操作,将激活缓存功能,在运行之间保留从 PyPI 的下载,并确保在存储库中的任何 Python 文件更新时缓存失效。然后,uv run 命令有助于自动安装 Python 脚本中定义的依赖项,如 fetch-rss.py 示例中所示,该示例指定了 feedparser 和 typer 等依赖项。此方法可提高效率并减少重复下载依赖项的需要。

流行工具与项目

flyteorg/flyte
可扩展且灵活的工作流编排平台,可无缝统一数据、ML 和分析堆栈。

alist-org/alist
🗂️A file list/WebDAV program that supports multiple storages, powered by Gin and Solidjs. / 一个支持多存储的文件列表/WebDAV程序,使用 Gin 和 Solidjs。

chainflag/eth-faucet
使用 Go 和 Svelte 构建的以太水龙头服务器。

fatedier/frp
快速反向代理,可帮助您将 NAT 或防火墙后面的本地服务器公开给 Internet。

SagerNet/sing-box
通用代理平台

xvzc/SpoofDPI
用 Go 编写的简单快速的反审查工具

v2ray/v2ray-core
用于构建代理以绕过网络限制的平台。

hyperledger/fabric
Hyperledger Fabric 是一个企业级许可分布式账本框架,用于开发解决方案和应用程序。其模块化和多功能设计可满足广泛的行业用例。它提供了一种独特的共识方法,可在保护隐私的同时实现大规模性能。

v2fly/domain-list-community
社区托管域列表。为 V2Ray 生成 geosite.dat。

v2fly/v2ray-core
用于构建代理以绕过网络限制的平台。

avelino/awesome-go
精选的 Go 框架、库和软件列表

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

danielmiessler/fabric
fabric 是一个开源框架,用于使用 AI 增强人类能力。它提供了一个模块化框架,用于使用一组可在任何地方使用的众包人工智能提示来解决特定问题。

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

OJ/gobuster
用 Go 编写的目录/文件、DNS 和 VHost 清除工具

fleetdm/fleet
面向 IT、安全和基础架构团队的开源平台。(Linux、macOS、Chrome、Windows、云、数据中心)

livekit/livekit
WebRTC 的端到端堆栈。SFU 媒体服务器和 SDK。

go-telegram-bot-api/telegram-bot-api
Telegram Bot API 的 Golang 绑定

qdm12/gluetun
VPN 客户端位于多个 VPN 提供商的精简 Docker 容器中,用 Go 编写,并使用 OpenVPN 或 Wireguard、DNS over TLS,内置了一些代理服务器。

miniflux/v2
极简主义和固执己见的 Feed Reader

ethereum-optimism/optimism
Optimism 是以太坊,可扩展。

evcc-io/evcc
Sonne tanken ☀️🚘

iyear/tdl
📥 用 Golang 编写的 Telegram 工具包


编辑:Tony Bai

编辑主页:tonybai.com

GopherDaily项目:github.com/bigwhite/gopherdaily

Copyright 2019-2024 GopherDaily