<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[云笔记，记录工作学习中遇到的问题，希望对你有帮助]]></title><description><![CDATA[Carpe Diem, Seize the Day]]></description><link>https://blog.youkuaiyun.com/Toormi</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Toormi]]></copyright><item><title><![CDATA[四个代码知识图谱项目对比：Understand-Anything、codegraph、GitNexus、codebase-memory-mcp 怎么选？]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/162281758</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/162281758</guid><author>Toormi</author><pubDate>Wed, 24 Jun 2026 22:00:38 +0800</pubDate><description><![CDATA[文章摘要 本文对比了四个代码知识图谱项目（Understand-Anything、codegraph、GitNexus、codebase-memory-mcp），旨在解决AI编程代理在大型代码库中盲目搜索的问题。Understand-Anything适合人类开发者理解项目架构；codegraph是轻量级本地索引，优化AI代理效率；GitNexus是功能全面的平台，支持团队级工作流；codebase-memory-mcp则侧重高性能本地代码记忆。项目各有侧重，适用于不同场景，从个人开发到企业级应用。选择需权衡]]></description><category></category></item><item><title><![CDATA[OpenClaw vs. Hermes Agent：深度对比与选型指南]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/160018584</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/160018584</guid><author>Toormi</author><pubDate>Fri, 10 Apr 2026 12:05:06 +0800</pubDate><description><![CDATA[技能标准，你可以将 Hermes Agent 作为“大脑”，托管在 OpenClaw 的“骨架”之上，实现强强联手。打造一个可控、安全、连接多个社交软件的 AI 助理，需要严格的任务调度和权限管理。拥有一个能自主思考、自我迭代、具备极强工程能力的“数字化身”或独立开发者。]]></description><category></category></item><item><title><![CDATA[Superpowers vs GSD：AI 编程智能体的“工程派”与“产品派”之争]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/159565262</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/159565262</guid><author>Toormi</author><pubDate>Sat, 28 Mar 2026 08:56:16 +0800</pubDate><description><![CDATA[本文对比了AI编程工具Superpowers和GSD的核心差异。Superpowers强调工程纪律，采用TDD、代码审查等严格流程，适合中大型项目；GSD则注重产品化封装，通过简洁命令和上下文管理快速交付，适合独立开发者。两者都致力于规范AI编程流程，但Superpowers偏向透明化工程方法，GSD则隐藏复杂度提供流畅体验。作者建议可根据项目阶段组合使用：GSD用于定义规划，Superpowers执行关键开发。这两种方案代表了AI编程领域&quot;工程派&quot;与&quot;产品派&quot;的不同]]></description><category></category></item><item><title><![CDATA[Go 1.26在性能方面做了哪些提升？]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/158210593</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/158210593</guid><author>Toormi</author><pubDate>Thu, 19 Feb 2026 20:38:24 +0800</pubDate><description><![CDATA[Go 1.26带来多项性能优化：默认启用Green Tea GC，通过顺序扫描提升缓存命中率，GC开销降低10-40%；cgo调用开销减少30%；优化小对象分配和切片栈分配策略；重写io.ReadAll等标准库函数。这些改进使微服务、API等场景无需修改代码即可获得更好的吞吐量、更低延迟和内存占用，尤其有利于存在大量小对象分配、cgo调用或I/O密集型的服务。]]></description><category></category></item><item><title><![CDATA[重大变革正在上演]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/158103378</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/158103378</guid><author>Toormi</author><pubDate>Sun, 15 Feb 2026 23:57:45 +0800</pubDate><description><![CDATA[作者：Matt Shumer • 2026年2月9日回想一下2020年2月。如果你当时密切关注，你可能已经注意到有几个人在谈论一种在海外传播的病毒。但我们大多数人并没有密切关注。股市表现很好，你的孩子在学校上课，你去餐厅吃饭、与人握手、计划旅行。如果有人告诉你他们正在囤积卫生纸，你可能会觉得他们在互联网某个奇怪的角落里待得太久了。然后，在大约三周的时间里，整个世界都变了。你的办公室关闭了，你的孩子回家了，生活重组成了你一个月前向自己描述时绝对不会相信的模样。]]></description><category></category></item><item><title><![CDATA[Go 1.25在性能方面做了哪些提升？]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/151308788</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/151308788</guid><author>Toormi</author><pubDate>Mon, 08 Sep 2025 07:42:02 +0800</pubDate><description><![CDATA[Go 1.25带来多项性能优化：实验性GreenTea GC显著提升小对象处理性能，减少40%垃圾回收开销；新增容器感知型GOMAXPROCS，自动适配容器CPU限制；JSON序列化提速30-50%，内存分配减少40-60%；内存管理策略优化减少碎片；PGO正式稳定实现代码优化。这些改进使Go在云原生、高并发场景下表现更优，提升吞吐量并降低延迟。（149字）]]></description><category></category></item><item><title><![CDATA[在基于 Go 的 DDD 分层架构中，包含多个server的项目目录结构应如何组织？]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/150974591</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/150974591</guid><author>Toormi</author><pubDate>Fri, 29 Aug 2025 09:35:09 +0800</pubDate><description><![CDATA[在基于 Go 的 DDD 分层架构中，项目目录结构应如何组织？如果项目中既需要启动 HTTP Server 和 gRPC Server，同时还包含一个不对外提供服务的 Worker，那么这几类 Server 应当如何划分和归类？]]></description><category></category></item><item><title><![CDATA[在 Go 项目的 DDD 分层架构中，Echo Web 框架及其 middleware 应该归属到哪一层？]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/150974284</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/150974284</guid><author>Toormi</author><pubDate>Fri, 29 Aug 2025 09:27:31 +0800</pubDate><description><![CDATA[本文探讨了在Go项目的DDD分层架构中，Echo Web框架及其middleware的归属问题以及main方法的组织方式。主要观点如下： 架构分层： 典型DDD+Echo项目目录结构包含cmd（程序入口）、internal（领域层、应用层、基础设施层、接口层）和pkg（公共库） 组件归属争议： 常规做法将Echo和middleware放在interfaces层（作为I/O适配） 更严格的DDD实践建议将Echo归入infrastructure层，通过抽象接口降低框架耦合 main.go职责： 仅负责初始化配]]></description><category></category></item><item><title><![CDATA[在 DDD 分层架构中，应用层是否仅用于处理对外暴露的接口？]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/150974092</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/150974092</guid><author>Toormi</author><pubDate>Fri, 29 Aug 2025 09:21:08 +0800</pubDate><description><![CDATA[在DDD分层架构中，应用层不仅处理对外接口，还负责编排所有业务用例，包括内部任务。以获取K线数据为例：触发点（如定时任务）位于接口层；应用层定义用例流程，协调领域层进行业务逻辑处理；基础设施层实现第三方API调用和持久化。这种分层确保了业务流程统一管理，避免逻辑分散。应用层的核心价值是组织所有系统行为，无论是否对外暴露。]]></description><category></category></item><item><title><![CDATA[解决 Docker 报错 “exec: no such file or directory”]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/149776735</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/149776735</guid><author>Toormi</author><pubDate>Wed, 30 Jul 2025 14:39:18 +0800</pubDate><description><![CDATA[在构建Go项目的Docker镜像时，常见的&quot;no such file or directory&quot;错误往往并非文件缺失，而是执行环境不匹配导致的。文章分析了四个主要原因：1) 动态链接库缺失（需静态编译）；2) 基础镜像架构不匹配；3) 文件权限问题；4) 跨平台编译错误。解决方案包括使用CGO_ENABLED=0静态编译、选择合适的基础镜像（scratch/alpine/debian）、检查文件权限和架构兼容性。推荐采用多阶段构建方式，并提供了静态编译和动态编译两种Dockerfile示]]></description><category></category></item><item><title><![CDATA[为什么设置 git commit签名是公钥而不是私钥？]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/149586107</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/149586107</guid><author>Toormi</author><pubDate>Wed, 23 Jul 2025 23:48:36 +0800</pubDate><description><![CDATA[摘要： Git设置SSH签名密钥时配置公钥而非私钥，是因为： 私钥用于实际签名，由本地ssh-agent管理，不直接配置在Git中； 公钥用于身份标识，Git通过其指纹匹配GitHub上的公钥以验证签名； 安全性考虑：私钥需保密，仅公钥可公开配置。用户需将公钥路径设为user.signingkey，私钥则由ssh-agent自动调用。操作时需生成专用密钥对，并将公钥上传至GitHub的SSH签名密钥列表。]]></description><category></category></item><item><title><![CDATA[如何把一个多行的RAS key放到环境变量中？]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/149225026</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/149225026</guid><author>Toormi</author><pubDate>Wed, 09 Jul 2025 15:14:43 +0800</pubDate><description><![CDATA[Shell 中正确设置多行 RSA 密钥环境变量的方法 问题：直接使用 export RSA_KEY=&quot;...&quot; 时，\n 会被存储为普通字符而非换行符。 解决方案： 推荐使用 printf：export RSA_KEY=$(printf &quot;-----BEGIN...\nMIIEv...&quot;)，自动转换\n为换行符 多行文本用 heredoc：通过 &lt;&lt;EOF 直接写入多行内容，无需转义 验证方式：echo &quot;$RSA_KEY&quot; 应显示多]]></description><category></category></item><item><title><![CDATA[Dockerfile中RUN指令的使用和最佳实践]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/146887067</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/146887067</guid><author>Toormi</author><pubDate>Mon, 31 Mar 2025 22:14:22 +0800</pubDate><description><![CDATA[如果是简单命令，用 shell 格式（如如果需要精确控制参数或避免 shell，用 exec 格式（如优化时合并命令、清理缓存，提升构建效率。]]></description><category></category></item><item><title><![CDATA[Ubuntu安装指定ruby版本]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/146887015</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/146887015</guid><author>Toormi</author><pubDate>Mon, 31 Mar 2025 22:12:14 +0800</pubDate><description><![CDATA[在 Ubuntu 上安装指定版本的 Ruby，可以使用版本管理工具如rbenv或RVM，因为 Ubuntu 默认的软件仓库可能只提供有限的 Ruby 版本。以下是使用rbenv。]]></description><category></category></item><item><title><![CDATA[Mac Apple silicon如何指定运行amd64架构的ubuntu Docker？]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/146886848</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/146886848</guid><author>Toormi</author><pubDate>Mon, 31 Mar 2025 22:09:35 +0800</pubDate><description><![CDATA[下面这个命令如何制定运行amd64架构的ubuntu？这个命令已经非常接近正确运行一个基于amd64架构的 Ubuntu 容器了，但如果你想明确指定运行amd64架构的镜像（例如在非amd64的主机上，如 ARM 架构的 Mac 或其他设备），可以用 Docker 的--platform参数来强制指定架构。]]></description><category></category></item><item><title><![CDATA[防腐层（Anti-Corruption Layer, ACL）应该位于DDD哪一层？]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/146451904</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/146451904</guid><author>Toormi</author><pubDate>Sun, 23 Mar 2025 09:40:20 +0800</pubDate><description><![CDATA[实现部分属于基础设施层，因为它处理与外部系统的技术交互和数据转换。接口部分通常定义在领域层，作为领域模型的抽象需求。由应用层调用，以协调业务逻辑和外部交互。这种设计既保护了领域模型的纯净性，又通过基础设施层隔离了外部系统的复杂性，是 DDD 处理外部依赖时的推荐实践。]]></description><category></category></item><item><title><![CDATA[仓储(Repository)应该属于DDD分层架构中的哪一层？]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/146451871</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/146451871</guid><author>Toormi</author><pubDate>Sun, 23 Mar 2025 09:39:13 +0800</pubDate><description><![CDATA[Repository 是 DDD 中的一个核心模式，用于封装对领域对象（如聚合根）的持久化逻辑，提供一个面向集合的接口，让领域层以类似内存操作的方式访问和管理数据。提供对聚合根的增删改查操作。屏蔽底层数据存储的细节（如数据库类型、ORM 框架）。确保领域层与基础设施层的解耦。在 Eric Evans 的《领域驱动设计》一书中，Repository 被视为领域层的一部分，因为它是领域模型的重要组成部分，与聚合根密切相关。Repository 接口属于领域层。]]></description><category></category></item><item><title><![CDATA[什么是依赖注入]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/146451841</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/146451841</guid><author>Toormi</author><pubDate>Sun, 23 Mar 2025 09:37:13 +0800</pubDate><description><![CDATA[在面向对象编程中，一个类（或对象）通常需要依赖其他类（或对象）来完成其功能。例如，一个类可能需要依赖来访问数据库。这种依赖关系如果由内部直接创建（如通过如果的实现发生变化，需要修改代码。测试时无法方便地替换为 mock 对象。依赖注入的目标是通过将依赖关系的控制权交给外部（通常是一个容器或框架），从而解决这些问题。依赖注入是指通过外部机制（而不是类内部）将一个对象所需的依赖传递给它。换句话说，类不再负责创建或管理它的依赖，而是由外部“注入”进来。]]></description><category></category></item><item><title><![CDATA[DDD分层架构]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/146451799</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/146451799</guid><author>Toormi</author><pubDate>Sun, 23 Mar 2025 09:35:33 +0800</pubDate><description><![CDATA[DDD 分层架构通过表现层、应用层、领域层和基础设施层的分工协作，将复杂的业务系统分解为可管理的部分。其核心在于将领域逻辑置于中心位置，通过依赖倒挂和接口隔离技术细节，从而构建出高内聚、低耦合的软件系统。这种架构特别适用于复杂业务场景，能够有效提升代码质量和长期可维护性。]]></description><category></category></item><item><title><![CDATA[如何让Go 的regexp包支持 (?!...) 这样的 Perl 语法？]]></title><link>https://blog.youkuaiyun.com/Toormi/article/details/146407930</link><guid>https://blog.youkuaiyun.com/Toormi/article/details/146407930</guid><author>Toormi</author><pubDate>Thu, 20 Mar 2025 22:28:07 +0800</pubDate><description><![CDATA[Go 的标准库regexp包基于 RE2 引擎，而 RE2 故意设计为不支持 Perl 风格的复杂特性（如!...)负向前瞻、后顾断言等），这是为了保证正则表达式的执行时间是线性的（O(n)），避免潜在的性能问题（例如正则表达式的“灾难性回溯”）。因此，在 Go 的标准库中，无法直接让regexp支持!...)这样的语法。不过，如果你确实需要在 Go 中使用 Perl 风格的正则表达式（包括负向前瞻!...)]]></description><category></category></item></channel></rss>