<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Protobuf on Tony老师的博客</title><link>https://blog.tanteng.space/tags/protobuf/</link><description>Recent content in Protobuf on Tony老师的博客</description><generator>Hugo</generator><language>zh</language><lastBuildDate>Thu, 28 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.tanteng.space/tags/protobuf/index.xml" rel="self" type="application/rss+xml"/><item><title>用本地 Stub 解决 Go Proto 冲突</title><link>https://blog.tanteng.space/posts/local-proto-stub-solution/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://blog.tanteng.space/posts/local-proto-stub-solution/</guid><description>&lt;p&gt;在 Go Monorepo 项目中，引入一个内部 RPC 依赖本该是一件简单的事——加一行 &lt;code&gt;require&lt;/code&gt;，配一个 &lt;code&gt;replace&lt;/code&gt;，代码编译通过，似乎万事大吉。但服务一启动，直接 panic：&lt;/p&gt;
&lt;div class="code-block"&gt;
 &lt;button class="code-copy" type="button" hidden aria-label="Copy code to clipboard"&gt;
 &lt;span class="code-copy-label" aria-hidden="true"&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;panic: proto: file &amp;#34;validate/validate.proto&amp;#34; is already registered
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;panic: proto: file &amp;#34;common.proto&amp;#34; has a name conflict over trpc.myservice.common.Team&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;&lt;p&gt;两个 panic，两个不同的 proto namespace 冲突。这是 Go protobuf 生态中一个经典的「传递依赖地狱」问题。&lt;/p&gt;
&lt;p&gt;本文记录一次真实问题的根因分析和解决方案：如何通过手写一个&lt;strong&gt;本地精简 Stub&lt;/strong&gt;，以最小代码代价绕过 proto 注册机制，彻底消除冲突。&lt;/p&gt;</description></item><item><title>google.protobuf.Value 用法与最佳实践</title><link>https://blog.tanteng.space/posts/google-protobuf-value-usage/</link><pubDate>Fri, 01 May 2026 10:00:00 +0800</pubDate><guid>https://blog.tanteng.space/posts/google-protobuf-value-usage/</guid><description>&lt;p&gt;在 Go 后端开发中，&lt;code&gt;google.protobuf.Value&lt;/code&gt; 是一个经常被提及但容易被误用的类型。它属于 Protobuf 的 Well-Known Types（内置类型），设计初衷是解决&lt;strong&gt;动态类型&lt;/strong&gt;问题——即在静态的 message 定义中承载任意的 JSON 兼容数据。&lt;/p&gt;
&lt;p&gt;本文从 Go 后端开发者的视角出发，系统讲解 &lt;code&gt;Value&lt;/code&gt; 的设计理念、Golang 实战用法，以及常见的最佳实践和避坑指南。&lt;/p&gt;</description></item></channel></rss>