blob: 724b28f919fb445bf9e31afa8ace11815c447071 [file] [log] [blame]
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo – 参考手册</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/refer/</link><description>Recent content in 参考手册 on Apache Dubbo</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><atom:link href="https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/refer/index.xml" rel="self" type="application/rss+xml"/><item><title>Overview: 配置项参考指南</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/refer/config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/refer/config/</guid><description>
&lt;h2 id="根配置">根配置&lt;/h2>
&lt;h2 id="客户端配置">客户端配置&lt;/h2>
&lt;h2 id="服务端配置">服务端配置&lt;/h2>
&lt;h2 id="注册中心配置">注册中心配置&lt;/h2>
&lt;h3 id="使用配置-api">使用配置 API&lt;/h3>
&lt;ul>
&lt;li>客户端使用配置 API 设置注册中心&lt;/li>
&lt;/ul>
&lt;p>可通过调用config.NewRegistryConfigWithProtocolDefaultPort方法,快速设置用于调试的注册中心,支持zookeeper(127.0.0.1:2181) 和nacos(127.0.0.1:8848)&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>rc &lt;span style="color:#719e07">:=&lt;/span> config.&lt;span style="color:#268bd2">NewRootConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetConsumer&lt;/span>(config.&lt;span style="color:#268bd2">NewConsumerConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetRegistryIDs&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;zookeeperID&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// use defined registryID
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddRegistry&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;zookeeperID&amp;#34;&lt;/span>, config.&lt;span style="color:#268bd2">NewRegistryConfigWithProtocolDefaultPort&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;zookeeper&amp;#34;&lt;/span>)).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>全部接口:可通过调用RegistryConfigBuilder提供的丰富接口进行配置。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>rc &lt;span style="color:#719e07">:=&lt;/span> config.&lt;span style="color:#268bd2">NewRootConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetConsumer&lt;/span>(config.&lt;span style="color:#268bd2">NewConsumerConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetRegistryIDs&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;nacosRegistryID&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// use defined registryID
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">AddReference&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;GreeterClientImpl&amp;#34;&lt;/span>,&lt;span style="color:#586e75">/*...*/&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddRegistry&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;nacosRegistryID&amp;#34;&lt;/span>, config.&lt;span style="color:#268bd2">NewRegistryConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProtocol&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;nacos&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetAddress&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;127.0.0.1:8848&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetGroup&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;dubbo-go&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetNamespace&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetUsername&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;admin&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetPassword&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;admin&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetTimeout&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;3s&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>服务端使用配置 API 设置配置中心&lt;/li>
&lt;/ul>
&lt;p>简易接口 config.NewRegistryConfigWithProtocolDefaultPort&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>rc &lt;span style="color:#719e07">:=&lt;/span> config.&lt;span style="color:#268bd2">NewRootConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProvider&lt;/span>(config.&lt;span style="color:#268bd2">NewProviderConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddService&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;GreeterProvider&amp;#34;&lt;/span>, &lt;span style="color:#586e75">/*...*/&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetRegistryIDs&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;registryKey&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// use defined registryID
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddRegistry&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;registryKey&amp;#34;&lt;/span>, config.&lt;span style="color:#268bd2">NewRegistryConfigWithProtocolDefaultPort&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;zookeeper&amp;#34;&lt;/span>)).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>全部接口:可通过调用RegistryConfigBuilder提供的丰富接口进行配置。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>rc &lt;span style="color:#719e07">:=&lt;/span> config.&lt;span style="color:#268bd2">NewRootConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProvider&lt;/span>(config.&lt;span style="color:#268bd2">NewProviderConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddService&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;GreeterProvider&amp;#34;&lt;/span>,&lt;span style="color:#586e75">/*...*/&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetRegistryIDs&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;registryKey&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// use defined registryID
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddRegistry&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;registryKey&amp;#34;&lt;/span>, config.&lt;span style="color:#268bd2">NewRegistryConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProtocol&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;nacos&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetAddress&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;127.0.0.1:8848&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetGroup&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;dubbo-go&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetNamespace&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetUsername&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;admin&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetPassword&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;admin&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetTimeout&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;3s&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="heading">&lt;/h3>
&lt;h2 id="网络协议">网络协议&lt;/h2>
&lt;h3 id="配置文件">配置文件&lt;/h3>
&lt;h3 id="使用配置-api-1">使用配置 API&lt;/h3>
&lt;ul>
&lt;li>客户端使用配置 API 设置网络协议&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>rc &lt;span style="color:#719e07">:=&lt;/span> config.&lt;span style="color:#268bd2">NewRootConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetConsumer&lt;/span>(config.&lt;span style="color:#268bd2">NewConsumerConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddReference&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;GreeterClientImpl&amp;#34;&lt;/span>, config.&lt;span style="color:#268bd2">NewReferenceConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetInterface&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;org.apache.dubbo.UserProvider&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProtocol&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;tri&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// set reference protcol to triple
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>服务端使用配置 API 设置网络协议&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>rc &lt;span style="color:#719e07">:=&lt;/span> config.&lt;span style="color:#268bd2">NewRootConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProvider&lt;/span>(config.&lt;span style="color:#268bd2">NewProviderConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddService&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;GreeterProvider&amp;#34;&lt;/span>, config.&lt;span style="color:#268bd2">NewServiceConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetInterface&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;org.apache.dubbo.UserProvider&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProtocolIDs&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;tripleProtocolKey&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// use protocolID &amp;#39;tripleProtocolKey&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddProtocol&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;tripleProtocolKey&amp;#34;&lt;/span>, config.&lt;span style="color:#268bd2">NewProtocolConfigBuilder&lt;/span>(). &lt;span style="color:#586e75">// define protocol config with protocolID &amp;#39;tripleProtocolKey&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">SetName&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;tri&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// set service protocol to triple
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="heading-1">&lt;/h3></description></item><item><title>Overview: 使用 dubbogo-cli 工具</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/refer/use_dubbogo_cli/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/refer/use_dubbogo_cli/</guid><description>
&lt;h2 id="1-安装">1. 安装&lt;/h2>
&lt;p>dubbogo-cli 是 Apach/dubbo-go 生态的子项目,为开发者提供便利的应用模板创建、工具安装、接口调试等功能,以提高用户的研发效率。&lt;/p>
&lt;p>执行以下指令安装dubbogo-cli 至 $GOPATH/bin&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>go install github.com/dubbogo/dubbogo-cli@latest
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="2-功能概览">2. 功能概览&lt;/h2>
&lt;p>dubbogo-cli 支持以下能力&lt;/p>
&lt;ul>
&lt;li>
&lt;p>应用模板创建&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>dubbogo-cli newApp .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在当前目录下创建应用模板&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Demo 创建&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>dubbogo-cli newDemo .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在当前目录下创建 RPC 示例,包含一个客户端和一个服务端&lt;/p>
&lt;/li>
&lt;li>
&lt;p>编译、调试工具安装&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>dubbogo-cli install all
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>一键安装以下等工具至 $GOPATH/bin&lt;/p>
&lt;ul>
&lt;li>
&lt;p>protoc-gen-go-triple&lt;/p>
&lt;p>用于 triple 协议接口编译&lt;/p>
&lt;/li>
&lt;li>
&lt;p>imports-formatter&lt;/p>
&lt;p>用于整理代码 import 块。&lt;/p>
&lt;p>&lt;a href="https://github.com/dubbogo/tools#imports-formatter">import-formatte README&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>查看 dubbo-go 应用注册信息&lt;/p>
&lt;ul>
&lt;li>
&lt;p>查看 Zookeeper 上面的注册信息, 获取接口及方法列表&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ dubbogo-cli show --r zookeeper --h 127.0.0.1:2181
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>interface: com.dubbogo.pixiu.UserService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>methods: &lt;span style="color:#719e07">[&lt;/span>CreateUser,GetUserByCode,GetUserByName,GetUserByNameAndAge,GetUserTimeout,UpdateUser,UpdateUserByName&lt;span style="color:#719e07">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>查看 Nacos 上面的注册信息 【功能开发中】&lt;/p>
&lt;/li>
&lt;li>
&lt;p>查看 Istio 的注册信息【功能开发中】&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>调试 Dubbo 协议接口&lt;/p>
&lt;/li>
&lt;li>
&lt;p>调试 Triple 协议接口&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="3-功能详解">3. 功能详解&lt;/h2>
&lt;h3 id="31-demo-应用介绍">3.1 Demo 应用介绍&lt;/h3>
&lt;h4 id="311-demo-创建">3.1.1 Demo 创建&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>dubbogo-cli newDemo .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在当前目录下创建Demo, 包含客户端和服务端,该 Demo 展示了基于一套接口,完成一次 RPC 调用。&lt;/p>
&lt;p>该Demo 使用直连模式,无需依赖注册中心,server端暴露服务到本地20000端口,客户端发起调用。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── api
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── samples_api.pb.go
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── samples_api.proto
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── samples_api_triple.pb.go
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── go-client
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── cmd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ └── client.go
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── conf
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── dubbogo.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── go-server
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── cmd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ └── server.go
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── conf
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── dubbogo.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└── go.mod
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="312-运行demo">3.1.2 运行Demo&lt;/h4>
&lt;p>开启服务端&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>$ cd go-server/cmd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ go run .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>另一个终端开启客户端&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>$ go mod tidy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ cd go-client/cmd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ go run .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可看到打印日志&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>INFO cmd/client.go:49 client response result: name:&amp;#34;Hello laurence&amp;#34; id:&amp;#34;12345&amp;#34; age:21
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="32-应用模板介绍">3.2 应用模板介绍&lt;/h3>
&lt;h4 id="321-应用模板创建">3.2.1 应用模板创建&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>dubbogo-cli newApp .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在当前目录下创建应用模板:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── Makefile
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── api
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── api.pb.go
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── api.proto
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── api_triple.pb.go
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── build
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── Dockerfile
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── chart
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── app
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ ├── Chart.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ ├── templates
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ │ ├── _helpers.tpl
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ │ ├── deployment.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ │ ├── service.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ │ └── serviceaccount.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ └── values.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── nacos_env
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── Chart.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── templates
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ ├── _helpers.tpl
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ ├── deployment.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ └── service.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── values.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── cmd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── app.go
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── conf
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── dubbogo.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── go.mod
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── go.sum
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└── pkg
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── service.go
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="322-应用模板介绍">3.2.2 应用模板介绍&lt;/h4>
&lt;p>生成项目包括几个目录:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>api:放置接口文件:proto文件和生成的.pb.go文件&lt;/p>
&lt;/li>
&lt;li>
&lt;p>build:放置镜像构建相关文件&lt;/p>
&lt;/li>
&lt;li>
&lt;p>chart:放置发布用 chart 仓库、基础环境chart 仓库:nacos、mesh(开发中)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>cmd:程序入口&lt;/p>
&lt;/li>
&lt;li>
&lt;p>conf:框架配置&lt;/p>
&lt;/li>
&lt;li>
&lt;p>pkg/service:RPC 服务实现&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Makefile:&lt;/p>
&lt;/li>
&lt;li>
&lt;ul>
&lt;li>镜像、helm部署名:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;ul>
&lt;li>
&lt;ul>
&lt;li>IMAGE = $(your_repo)/$(namespace)/$(image_name)
TAG = 1.0.0&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>HELM_INSTALL_NAME = dubbo-go-app,helm 安装名,用于 helm install/uninstall 命令。&lt;/p>
&lt;/li>
&lt;li>
&lt;ul>
&lt;li>提供脚本,例如:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;ul>
&lt;li>
&lt;ul>
&lt;li>make build # 打包镜像并推送&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>make buildx-publish # arm架构本地打包amd64镜像并推送,依赖 docker buildx&lt;/p>
&lt;/li>
&lt;li>
&lt;p>make deploy # 通过 helm 发布应用&lt;/p>
&lt;/li>
&lt;li>
&lt;p>make remove # 删除已经发布的 helm 应用&lt;/p>
&lt;/li>
&lt;li>
&lt;p>make proto-gen # api下生成 pb.go 文件&lt;/p>
&lt;/li>
&lt;li>&lt;/li>
&lt;/ul>
&lt;p>使用应用模板的开发流程&lt;/p>
&lt;blockquote>
&lt;p>依赖环境:make、go、helm、kubectl、docker&lt;/p>
&lt;/blockquote>
&lt;ol>
&lt;li>通过 dubbogo-cli 生成模板&lt;/li>
&lt;li>修改api/api.proto&lt;/li>
&lt;li>make proto-gen&lt;/li>
&lt;li>开发接口&lt;/li>
&lt;li>修改 makefile 内 IMAGE 镜像名和 HELM_INSTALL_NAME 发布名&lt;/li>
&lt;li>打镜像并推送&lt;/li>
&lt;li>修改chart/app/values 内与部署相关的value配置, 重点关注镜像部分。&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>image:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> repository: $(your_repo)/$(namespace)/$(image_name)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> pullPolicy: Always
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> tag: &amp;#34;1.0.0&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="8">
&lt;li>make deploy, 使用 helm 发布应用。&lt;/li>
&lt;/ol>
&lt;h3 id="33-以-grpc-协议调试-dubbo-go-应用">3.3 以 gRPC 协议调试 dubbo-go 应用&lt;/h3>
&lt;h4 id="331-简介">3.3.1 简介&lt;/h4>
&lt;p>grpc_cli 工具是 gRPC 生态用于调试服务的工具,在 server 开启&lt;a href="https://github.com/grpc/grpc/blob/master/doc/server-reflection.md">反射服务&lt;/a>的前提下,可以获取到服务的 proto 文件、服务名、方法名、参数列表,以及发起 gRPC 调用。&lt;/p>
&lt;p>Triple 协议兼容 gRPC 生态,并默认开启 gRPC 反射服务,因此可以直接使用 grpc_cli 调试 triple 服务。&lt;/p>
&lt;h4 id="332-安装grpc_cli">3.3.2 安装grpc_cli&lt;/h4>
&lt;blockquote>
&lt;p>后续将由 dubbogo-cli 安装,目前需要用户手动安装&lt;/p>
&lt;/blockquote>
&lt;p>参考&lt;a href="https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md">grpc_cli 文档&lt;/a>&lt;/p>
&lt;h4 id="333-使用-grpc_cli-对-triple-服务进行调试">3.3.3 使用 grpc_cli 对 Triple 服务进行调试&lt;/h4>
&lt;ol>
&lt;li>查看 triple 服务的接口定义&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ grpc_cli ls localhost:20001 -l
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>filename: helloworld.proto
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>package: org.apache.dubbo.quickstart.samples;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>service UserProvider &lt;span style="color:#719e07">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rpc SayHello&lt;span style="color:#719e07">(&lt;/span>org.apache.dubbo.quickstart.samples.HelloRequest&lt;span style="color:#719e07">)&lt;/span> returns &lt;span style="color:#719e07">(&lt;/span>org.apache.dubbo.quickstart.samples.User&lt;span style="color:#719e07">)&lt;/span> &lt;span style="color:#719e07">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rpc SayHelloStream&lt;span style="color:#719e07">(&lt;/span>stream org.apache.dubbo.quickstart.samples.HelloRequest&lt;span style="color:#719e07">)&lt;/span> returns &lt;span style="color:#719e07">(&lt;/span>stream org.apache.dubbo.quickstart.samples.User&lt;span style="color:#719e07">)&lt;/span> &lt;span style="color:#719e07">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>查看请求参数类型&lt;/li>
&lt;/ol>
&lt;p>例如开发者期望测试上述端口的 SayHello 方法,尝试获取HelloRequest的具体定义,需要执行r如下指令,可查看到对应参数的定义。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ grpc_cli &lt;span style="color:#b58900">type&lt;/span> localhost:20001 org.apache.dubbo.quickstart.samples.HelloRequest
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>message HelloRequest &lt;span style="color:#719e07">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> string &lt;span style="color:#268bd2">name&lt;/span> &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">1&lt;/span> &lt;span style="color:#719e07">[&lt;/span>&lt;span style="color:#268bd2">json_name&lt;/span> &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#719e07">]&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>请求接口&lt;/li>
&lt;/ol>
&lt;p>已经知道了请求参数的具体类型,可以发起调用来测试对应服务。查看返回值是否符合预期。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ grpc_cli call localhost:20001 SayHello &lt;span style="color:#2aa198">&amp;#34;name: &amp;#39;laurence&amp;#39;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>connecting to localhost:20001
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>name: &lt;span style="color:#2aa198">&amp;#34;Hello laurence&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>id: &lt;span style="color:#2aa198">&amp;#34;12345&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>age: &lt;span style="color:#2aa198">21&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Received trailing metadata from server:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>accept-encoding : identity,gzip
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>adaptive-service.inflight : &lt;span style="color:#2aa198">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>adaptive-service.remaining : &lt;span style="color:#2aa198">50&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grpc-accept-encoding : identity,deflate,gzip
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Rpc succeeded with OK status
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="34-以-dubbo-协议调试dubbo-go-应用">3.4 以 Dubbo 协议调试dubbo-go 应用&lt;/h3>
&lt;h4 id="341-开启-dubbo-服务端">3.4.1 开启 Dubbo 服务端&lt;/h4>
&lt;p>示例:user.go:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">func&lt;/span> (u &lt;span style="color:#719e07">*&lt;/span>UserProvider) GetUser(ctx context&lt;span style="color:#719e07">.&lt;/span>Context, userStruct &lt;span style="color:#719e07">*&lt;/span>CallUserStruct) (&lt;span style="color:#719e07">*&lt;/span>User, error) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> fmt&lt;span style="color:#719e07">.&lt;/span>Printf(&lt;span style="color:#2aa198">&amp;#34;=======================&lt;/span>&lt;span style="color:#cb4b16">\n&lt;/span>&lt;span style="color:#2aa198">req:%#v&lt;/span>&lt;span style="color:#cb4b16">\n&lt;/span>&lt;span style="color:#2aa198">&amp;#34;&lt;/span>, userStruct)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rsp :&lt;span style="color:#719e07">=&lt;/span> User{&lt;span style="color:#2aa198">&amp;#34;A002&amp;#34;&lt;/span>, &lt;span style="color:#2aa198">&amp;#34;Alex Stocks&amp;#34;&lt;/span>, &lt;span style="color:#2aa198">18&lt;/span>, userStruct&lt;span style="color:#719e07">.&lt;/span>SubInfo}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> fmt&lt;span style="color:#719e07">.&lt;/span>Printf(&lt;span style="color:#2aa198">&amp;#34;=======================&lt;/span>&lt;span style="color:#cb4b16">\n&lt;/span>&lt;span style="color:#2aa198">rsp:%#v&lt;/span>&lt;span style="color:#cb4b16">\n&lt;/span>&lt;span style="color:#2aa198">&amp;#34;&lt;/span>, rsp)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">return&lt;/span> &lt;span style="color:#719e07">&amp;amp;&lt;/span>rsp, nil
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>服务端开启一个服务,名为GetUser,传入一个CallUserStruct的参数,返回一个User参数
CallUserStruct参数定义:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span style="display:flex;">&lt;span>type CallUserStruct struct {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ID string
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Male &lt;span style="color:#cb4b16">bool&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> SubInfo SubInfo &lt;span style="color:#719e07">//&lt;/span> 嵌套子结构
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">func&lt;/span> (cs CallUserStruct) JavaClassName() string {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">return&lt;/span> &lt;span style="color:#2aa198">&amp;#34;com.ikurento.user.CallUserStruct&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type SubInfo struct {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> SubID string
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> SubMale &lt;span style="color:#cb4b16">bool&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> SubAge &lt;span style="color:#cb4b16">int&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">func&lt;/span> (s SubInfo) JavaClassName() string {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">return&lt;/span> &lt;span style="color:#2aa198">&amp;#34;com.ikurento.user.SubInfo&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>User结构定义:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span style="display:flex;">&lt;span>type User struct {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Id string
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Name string
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Age int32
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> SubInfo SubInfo &lt;span style="color:#719e07">//&lt;/span> 嵌套上述子结构SubInfo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">func&lt;/span> (u &lt;span style="color:#719e07">*&lt;/span>User) JavaClassName() string {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">return&lt;/span> &lt;span style="color:#2aa198">&amp;#34;com.ikurento.user.User&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>开启服务:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>cd server`
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>`source builddev.sh`
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>`go run .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="342-定义请求体-适配于序列化协议">3.4.2 定义请求体 (适配于序列化协议)&lt;/h4>
&lt;p>请求体定义为json文件,约定键值均为string
键对应go语言struct字段名例如&amp;quot;ID&amp;quot;、&amp;ldquo;Name&amp;rdquo; ,值对应&amp;quot;type@val&amp;quot;
其中type支持string int bool time,val使用string 来初始化,如果只填写type则初始化为零值。 约定每个struct必须有JavaClassName字段,务必与server端严格对应&lt;/p>
&lt;p>见userCall.json:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;ID&amp;#34;: &amp;#34;string@A000&amp;#34;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;Male&amp;#34;: &amp;#34;bool@true&amp;#34;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;SubInfo&amp;#34;: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;SubID&amp;#34;: &amp;#34;string@A001&amp;#34;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;SubMale&amp;#34;: &amp;#34;bool@false&amp;#34;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;SubAge&amp;#34;: &amp;#34;int@18&amp;#34;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;JavaClassName&amp;#34;:&amp;#34;string@com.ikurento.user.SubInfo&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;JavaClassName&amp;#34;: &amp;#34;string@com.ikurento.user.CallUserStruct&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>userCall.json将参数CallUserStruct的结构及子结构SubInfo都定义了出来,并且给请求参数赋值。&lt;/p>
&lt;p>user.json 同理,作为返回值不需要赋初始值,但JavaClassName字段一定与server端严格对应&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;ID&amp;#34;: &amp;#34;string&amp;#34;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;Name&amp;#34;: &amp;#34;string&amp;#34;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;Age&amp;#34;: &amp;#34;int&amp;#34;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;JavaClassName&amp;#34;: &amp;#34;string@com.ikurento.user.User&amp;#34;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;SubInfo&amp;#34;: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;SubID&amp;#34;: &amp;#34;string&amp;#34;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;SubMale&amp;#34;: &amp;#34;bool&amp;#34;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;SubAge&amp;#34;: &amp;#34;int&amp;#34;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;JavaClassName&amp;#34;:&amp;#34;string@com.ikurento.user.SubInfo&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="343-调试端口">3.4.3 调试端口&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>./dubbo-go-cli -h=localhost -p=20001 -proto=dubbo -i=com.ikurento.user.UserProvider -method=GetUser -sendObj=&amp;#34;./userCall.json&amp;#34; -recvObj=&amp;#34;./user.json&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>打印结果:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 Created pkg:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 &amp;amp;{ID:A000 Male:true SubInfo:0xc00006ea20 JavaClassName:com.ikurento.user.CallUserStruct}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 SubInfo:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 &amp;amp;{SubID:A001 SubMale:false SubAge:18 JavaClassName:com.ikurento.user.SubInfo}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 Created pkg:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 &amp;amp;{ID: Name: Age:0 JavaClassName:com.ikurento.user.User SubInfo:0xc00006ec90}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 SubInfo:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 &amp;amp;{SubID: SubMale:false SubAge:0 JavaClassName:com.ikurento.user.SubInfo}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 connected to localhost:20001!
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 try calling interface:com.ikurento.user.UserProvider.GetUser
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 with protocol:dubbo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 After 3ms , Got Rsp:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 &amp;amp;{ID:A002 Name:Alex Stocks Age:18 JavaClassName: SubInfo:0xc0001241b0}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 SubInfo:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2020/10/26 20:47:45 &amp;amp;{SubID:A001 SubMale:false SubAge:18 JavaClassName:}```
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可看到详细的请求体赋值情况,以及返回结果和耗时。支持嵌套结构&lt;/p>
&lt;p>server端打印结果&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>=======================
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>req:&amp;amp;main.CallUserStruct{ID:&amp;#34;A000&amp;#34;, Male:true, SubInfo:main.SubInfo{SubID:&amp;#34;A001&amp;#34;, SubMale:false, SubAge:18}}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>=======================
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可见接收到了来自cli的数据&lt;/p></description></item><item><title>Overview: 生态组件</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/refer/ecology/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/refer/ecology/</guid><description>
&lt;h3 id="dubbo-go--dubbo-go-30">Dubbo-go / Dubbo-go 3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/apache/dubbo-go">github.com/apache/dubbo-go&lt;/a>&lt;/p>
&lt;p>Apache Dubbo Go 语言实现,架起 Java 和 Golang 之间的桥梁。&lt;/p>
&lt;h3 id="dubbo-go-pixiu">Dubbo-go-pixiu&lt;/h3>
&lt;p>&lt;a href="https://github.com/apache/dubbo-go-pixiu">github.com/apache/dubbo-go-pixiu&lt;/a>&lt;/p>
&lt;p>dubbo-go-pixiu 网关支持以 dubbo 协议和 http 协议调用 dubbo/dubbo-go 集群&lt;/p>
&lt;h3 id="dubbo-getty">Dubbo-getty&lt;/h3>
&lt;p>&lt;a href="https://github.com/apache/dubbo-getty">github.com/apache/dubbo-getty&lt;/a>&lt;/p>
&lt;p>dubbo-getty 是一个Go语言异步网络 io 库,支持 tcp/udp/websocket 协议。&lt;/p>
&lt;h3 id="dubbo-go-hessian2">Dubbo-go-hessian2&lt;/h3>
&lt;p>&lt;a href="https://github.com/apache/dubbo-go-hessian2">github.com/apache/dubbo-go-hessian2&lt;/a>&lt;/p>
&lt;p>Dubbo-go-hessian2 是一个Go语言 hessian2 序列化协议库&lt;/p>
&lt;h3 id="dubbogo-tools">Dubbogo-tools&lt;/h3>
&lt;p>&lt;a href="https://github.com/dubbogo/tools">github.com/dubbogo/tools&lt;/a>&lt;/p>
&lt;p>Dubbogo-tools 包括&lt;/p>
&lt;ul>
&lt;li>dubbo-cli 工具&lt;/li>
&lt;li>imports-formatter Go语言 imports 块格式化工具&lt;/li>
&lt;li>protoc-gen-triple PB编译插件&lt;/li>
&lt;li>protoc-gen-dubbo3grpc PB编译插件&lt;/li>
&lt;/ul>
&lt;h3 id="triple-go">Triple-go&lt;/h3>
&lt;p>&lt;a href="https://github.com/dubbogo/triple">github.com/dubbogo/triple&lt;/a>&lt;/p>
&lt;p>Triple-go 为 Go 语言实现的 Triple (Dubbo3) 网络协议库,基于 HTTP2 协议。&lt;/p></description></item><item><title>Overview: 版本号</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/refer/compatible_version/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/refer/compatible_version/</guid><description>
&lt;p>Dubbo-go 发布新版本时更新当前依赖的的版本。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:center">依赖&lt;/th>
&lt;th>Dubbo-go&lt;/th>
&lt;th>Triple&lt;/th>
&lt;th>protoc-gen-go-triple&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:center">&lt;/td>
&lt;td>v3.0.1&lt;/td>
&lt;td>v1.1.8&lt;/td>
&lt;td>v1.0.8&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">&lt;/td>
&lt;td>v3.0.0&lt;/td>
&lt;td>v1.1.6&lt;/td>
&lt;td>v1.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">&lt;/td>
&lt;td>v3.0.0-rc4-1&lt;/td>
&lt;td>v1.1.3&lt;/td>
&lt;td>v1.0.2&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">&lt;/td>
&lt;td>v3.0.0-rc3&lt;/td>
&lt;td>v1.0.9&lt;/td>
&lt;td>v1.0.0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Overview: 配置基本概念</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/refer/basic_concept/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/refer/basic_concept/</guid><description>
&lt;h2 id="1-框架配置">1. 框架配置&lt;/h2>
&lt;p>Dubbo-go 框架需要依赖配置进行启动。配置中包含了开发者希望使用框架的各种能力。&lt;/p>
&lt;h3 id="配置格式">配置格式&lt;/h3>
&lt;p>yaml&lt;/p>
&lt;h3 id="配置路径">配置路径&lt;/h3>
&lt;p>默认从 &lt;code>../conf/dubbogo.yaml &lt;/code> 加载框架配置&lt;/p>
&lt;p>可通过指定环境变量:DUBBO_GO_CONFIG_PATH=$(your_config_path)/dubbogo.yaml 来修改配置文件路径。&lt;/p>
&lt;h3 id="配置根结构">配置根结构&lt;/h3>
&lt;p>位于 &lt;a href="https://github.com/apache/dubbo-go/blob/e00cf8d6fb2be3cd9c6e42cc3d6efa54e10229d3/config/root_config.go#L50">dubbo.apache.org/dubbo-go/v3/config/root_config.go: RootConfig&lt;/a>&lt;/p>
&lt;p>框架加载时,任何形式的配置都会被解析成 RootConfig,在 RootConfig.Init 方法中加载。&lt;/p>
&lt;h2 id="2-配置api">2. 配置API&lt;/h2>
&lt;p>开发者可以使用 API 的形式构建配置,从而启动框架。该方法较适合 dubbo-go 作为第三方组件引入的情况。&lt;/p>
&lt;h2 id="3-配置中心">3. 配置中心&lt;/h2>
&lt;p>开发者可以将配置放置在配置中心,从而便于配置的管理和修改。&lt;/p></description></item></channel></rss>