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

GopherDaily

2024-11-19

每日一谚:Do not declare an interface just for testing.


Go技术生态

Go语言的Hyrum定律
Hyrum定律是以软件工程师Hyrum Wright命名的,强调了API行为变化的意外后果,因为用户普遍依赖于特定的行为,即使这些行为没有正式记录。该定律表明,API中的任何可观察行为,无论是故意的还是意外的,都会被某些人使用,如果这些行为被更改,可能会引发问题。这个原则在Go编程语言中得到了体现,Go代码库中的注释承认对特定错误信息(例如“http: 请求体过大”)的依赖,这种依赖可能因轻微的更改而受到影响。 Hyrum定律在多个Go包中都有实例,包括crypto/rsa、internal/weak等,表明它在不同代码库中的广泛相关性。这个讨论对开发者发出了警示,建议他们在设计系统时尽量减少意外行为成为关键依赖的可能性,强调在进行可能影响依赖于既定行为的用户的更改之前,需要谨慎考虑。

了解Go中的命令注入漏洞
源文档讨论了 Go 应用程序中命令注入漏洞的风险,其中攻击者利用未经审查的用户输入来执行任意命令。它强调了此类漏洞的危险,包括数据泄露、系统泄露和服务中断。本文档提供了一个真实示例,即 Go 应用程序使用 'os/exec' 运行系统命令,该命令容易受到命令注入的影响。为了降低这些风险,该文件建议 Go 开发人员验证和清理用户输入,使用安全的 API 或库避免直接执行系统命令,并利用 Snyk 等工具进行静态分析来识别和修复漏洞。Snyk 与 IDE 的集成提供了实时反馈和最佳实践,以防止命令注入,从而在开发过程中增强代码安全性。

使用 delve 调试 Go 核心转储:导出字节切片
本文提供了使用 delve 调试器调试 Go 核心转储的指南,尤其是在处理 Go 程序中的意外崩溃时。它首先解释了在没有清楚地了解崩溃条件的情况下分析 core dump 的挑战。然后,本文介绍了将字节切片内容从内存保存到文件以供进一步分析的方法,例如使用 'os.WriteFile“或打印到编辑器。对于核心转储,建议在 Linux 或 macOS 上启用核心转储收集,并将“coredumpctl”与 delve 一起使用。本文还解决了 'net/http' 服务器默认不生成核心转储的问题,提出了一种解决方法,包括向进程发送 'SIGABRT' 信号以触发核心转储。它以一个实际示例结束,该示例使用这些技术通过修改服务器的 panic 处理来调试 'net/http' 服务器崩溃以生成核心转储。

Go中秘而不宣的数据结构: 四叉堆,不是普通的二叉堆
本文介绍了Go语言中四叉堆的数据结构,它是一种优先队列数据结构,允许比二进制堆更快地执行降低优先级操作,但代价是删除最小操作速度较慢。

使用 Golang 创建 PDF 缩略图和预览
本文提供了使用 Golang 创建 PDF 缩略图和预览的全面指南,Golang 是一种静态类型、编译的编程语言,以其简单性和性能而闻名。它首先介绍了 PDF 缩略图和预览的好处,例如快速文档概述、更好的导航、增强的用户体验和存储效率。然后,该指南概述了该过程中涉及的步骤,首先选择合适的 Golang 库进行 PDF 处理,例如 Unidoc、GoFPDF 或 pdfcpu。后续步骤包括从 PDF 中提取页面,将它们转换为缩略图的图像格式,以及生成基于文本的预览。本文强调了通过缓存、限制页面大小和使用 goroutines 来优化性能。最后,它讨论了质量控制、文件大小优化和错误处理等最佳实践。文章最后强调 UnidocLib 是一种在 Golang 中管理 PDF 和 Office 文件的强大解决方案,旨在简化工作流程并改善用户与文档管理系统的交互。

迁移到 sqlc 以获得更好的性能
Hatchet 团队从使用 Prisma 过渡到 sqlc 作为他们的计算服务,该服务专注于异步任务并使用 Postgres 队列运行。这种转变是由对更好性能的需求推动的,因为他们的目标是从每秒数百个任务扩展到每秒 2k 个任务以上。虽然 Prisma 最初对其声明式 DSL 和易用性有益,但在处理复杂的对象层次结构、强制性的一对一关系和高基数关系方面面临限制。此外,Prisma 无法支持某些数据库优化(如表分区和标识列),以及对事务完整性和连接延迟的担忧,促使 Prisma 转向 sqlc。这一变化使 Hatchet 能够保持对 Postgres 查询的完全控制,并利用更强大的迁移工具,最终提高吞吐量并减少延迟。该过程包括从 Prisma 的 DSL 生成 sqlc 架构,并使用 Atlas 管理迁移,确保平稳过渡,同时保持 Prisma 架构作为事实来源。

伪随机数生成器:从起源到现代算法
本文档深入探讨了伪随机数生成器 (PRNG),追溯了它们从早期方法到现代算法的演变。它首先区分了真随机性和伪随机性,强调了 PRNG 的可预测性和可再现性,这对于模拟、游戏开发和统计抽样至关重要。以 John von Neumann 的中间平方法和线性同余生成器 (LCG) 作为基础技术,重新审视了 PRNG 的起源。理论进步导致了更复杂的 PRNG 的发展,例如 Mersenne Twister,尽管存在局限性,但它为统计特性设定了高标准。讨论了现代 PRNG,例如 xorshift、xoshiro/xoroshiro 和 PCG,因为它们的效率更高、周期长度和统计性能。该文件还强调了 PRNG 在各种软件开发领域的重要性,包括科学模拟、游戏、机器学习和分布式系统。最后,它表明 PRNG 的未来可能涉及 SIMD 优化以提高性能。本摘要概括了该文件对 PRNG 的全面研究、它们的历史发展、理论基础、实际应用和潜在的未来进展。

托管您自己的元搜索引擎以避免跟踪和分析
在此视频教程中,来自 Tailscale 的 Alex Kretzschmar 和 Parker Higgins 演示了如何将开源搜索引擎聚合器 SearXNG 与 Tailscale 结合使用,以创建私有、安全且可自定义的搜索体验。本教程将指导查看者完成在 Proxmox 上的 Docker 容器中安装 SearXNG 的过程,使其可以通过 Tailscale 的网络进行访问。SearXNG 的吸引力在于其注重隐私的设计,它避免了与主要搜索提供商相关的后台跟踪,以及它的可配置性,允许用户定制数据源和演示文稿。本教程还包括设置 Tailscale Serve 以管理容器访问和自动化 TLS 证书配置的说明。我们鼓励 Tailscale 社区参与内容并提供反馈,并提供进一步探索和社区互动的资源。

云原生技术

外部授权的技术复杂性
本文深入探讨了在软件系统中实现外部化授权的复杂性,强调了它在可扩展性、可维护性和集成方面的好处。外部化授权涉及将授权逻辑与应用程序代码解耦,从而允许更灵活、更集中地管理用户权限。但是,这种方法带来了一些技术挑战,包括与主要应用程序的集成、用户帐户和权限的管理、数据筛选和分页、安全和隐私问题,以及确保可扩展性和可靠性。为了降低这些复杂性,本文建议遵守行业标准,利用预构建的授权平台,并在必要时寻求专业知识。这篇文章强调了仔细规划和使用经过验证的策略的重要性,以便在不影响系统性能或安全性的情况下有效实施外部授权。

现在是限制 SaaS 并返回本地部署的时候了吗?
本文深入探讨了关于依赖软件即服务 (SaaS) 的争论,以及关键系统恢复到本地解决方案的潜在好处。它强调了 SEC 对 SaaS 环境中数据安全性和合规性的日益担忧,强调了加强对敏感数据控制的必要性。这篇文章认为,本地解决方案提供了更好的安全性、成本效益和法规遵从性,特别是对于 CI/CD 等任务关键型应用程序。但是,它也承认 SaaS 在不太敏感的动态需求方面的价值。讨论结束时呼吁采用平衡的方法,建议采用一种混合模型,该模型利用 SaaS 和本地解决方案的优势,同时保持优先考虑安全性和合规性的谨慎采用策略。 (注意:提供的文本是源文档中关键点的摘要,而不是逐字摘录。该摘要旨在概括文档中提出的主要论点和主题。

KubeCon NA 2024 总结:不要错过这些主要的 CNCF 项目新闻
KubeCon NA 2024 展示了 CNCF 生态系统内的重大进步和公告,突出了 Dapr 毕业为毕业项目,引入了认证后台助理 (CBA) 等新认证,以及 Jaeger v2、Prometheus 3.0 等主要软件更新的发布,以及 Helm 4 开发的开始。会议还向 CNCF 沙盒提交了新项目,包括 Red Hat 的 Podman Container Tools 和 Microsoft Azure 的 Hyperlight,以及 AWS 的 kro 发布。此外,CNCF 还通过年度 CNCF 社区奖来庆祝其社区,以表彰各种成员的贡献。这些发展突显了 Cloud Native 社区内的持续创新和协作,以及 CNCF 项目的持续增长和成熟。

为什么 API 优先在 AI 驱动型世界中很重要
源文档强调了 API 优先方法在 AI 驱动世界背景下的重要性,其中 API 对于 AI 应用程序的功能和可扩展性变得越来越重要。它强调 API 不仅是技术支柱,而且是以安全、与域对齐和根据特定需求量身定制的方式提供价值和见解的关键。本文档讨论了 API-First 的原则,这些原则优先考虑消费者的需求和互操作性,并表明这些原则对于 AI 代理和自动化工作流程至关重要。它还谈到了 OpenAPI Initiative 等标准的重要性,以确保 API 交互中更丰富的语义和确定性。本文档倡导加强 API 优先原则的策略,以准备 API 以有效支持 AI 驱动的应用程序。 (注意:摘要是根据提供的文本摘录制作的,不包括文档中的直接引用或具体问题。

AI

扩展 AI 代理和编辑器之间的交互
源文档表示当用户尝试访问他们无权查看的资源或页面时,通常由 Web 服务器(特别是 Nginx)显示的错误消息。“403 Forbidden”状态代码表示服务器理解请求但拒绝授权,通常是由于身份验证凭据不正确或不充分。此错误清楚地表明,当服务器运行时,用户的访问权限未得到充分配置或识别。该文档虽然简短,但强调了 Web 管理中遇到的一个常见问题,并强调了适当的访问控制设置的重要性,以确保用户与 Web 资源进行安全和授权的交互。

LLM 和 LLM 系统的安全性:主要风险和保障措施
本文档对大型语言模型 (LLM) 和 LLM 系统的安全注意事项进行了深入分析,强调了了解 LLM 和 LLM 系统之间的区别的重要性。它强调,虽然 LLM 的攻击面最小,但集成了包括 LLM 在内的 AI 组件的 LLM 系统的复杂性需要更广泛的安全视角。该文件强调了及时注入的固有风险,以及需要强大的 AI 平台来促进 ML 管道的设计以确保模型安全。它还讨论了运行时护栏在通过处理和验证 LLM 的输入和输出来缓解安全漏洞方面的作用。该文件最后倡导为衡量和衡量 LLM 安全性的开源工具和框架做出贡献,例如 Granite Guardian 和 TrustyAI,以增强 LLM 和 AI 系统的安全性。 (注意:摘要旨在概括文档的关键点,同时保持简洁和连贯性。它不包括直接引用或特定 URL,而是侧重于所提出的总体主题和建议。

流行工具与项目

projectdiscovery/katana
下一代爬行和爬取框架。

influxdata/telegraf
用于收集、处理、聚合和写入指标、日志和其他任意数据的代理。

stakater/Reloader
一个 Kubernetes 控制器,用于监视 ConfigMap 和 Secrets 的变化,并在 Pod 及其相关的 Deployment、StatefulSet、DaemonSet 和 DeploymentConfig 上进行滚动升级 – [✩Star] 如果你正在使用它!

stretchr/testify
一个带有常见断言和 mock 的工具包,可与标准库很好地配合

kyverno/kyverno
云原生策略管理

m1k1o/neko
在 docker 中运行并使用 WebRTC 的自托管虚拟浏览器。

kedacore/keda
KEDA 是基于 Kubernetes 的事件驱动自动缩放组件。它为在 Kubernetes 中运行的任何容器提供事件驱动的扩展

VictoriaMetrics/VictoriaMetrics
VictoriaMetrics:快速、经济高效的监控解决方案和时间序列数据库

elastic/go-elasticsearch
Elasticsearch 的官方 Go 客户端

smartcontractkit/chainlink
去中心化预言机网络的节点,桥接链上和链下计算

spf13/cobra
用于现代 Go CLI 交互的 Commander

containerd/containerd
开放可靠的容器运行时

kubernetes/client-go
适用于 Kubernetes 的 Go 客户端。

getsops/sops
用于管理密钥的简单灵活的工具

jesseduffield/lazygit
用于 git 命令的简单终端 UI

netbirdio/netbird
通过 SSO、MFA 和精细访问控制将您的设备连接到基于 WireGuard® 的安全覆盖网络。

uptrace/bun
SQL 优先的 Golang ORM

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

go-gorm/gorm
出色的 Golang ORM 库旨在对开发人员友好

prometheus/node_exporter
计算机指标的导出器

docker/cli
The Docker CLI

prometheus-operator/prometheus-operator
Prometheus Operator 在 Kubernetes 上创建/配置/管理 Prometheus 集群

go-gitea/gitea
Git 喝杯茶!轻松的自托管一体化软件开发服务,包括 Git 托管、代码审查、团队协作、包注册表和 CI/CD

segmentio/kafka-go
Go 中的 Kafka 库

patrickmn/go-cache
用于 Go 的内存中 key:value 存储/缓存(类似于 Memcached)库,适用于单机应用程序。


编辑:Tony Bai

编辑主页:tonybai.com

GopherDaily项目:github.com/bigwhite/gopherdaily

Copyright 2019-2024 GopherDaily