<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Go Micro</title><link>https://go-micro.dev/index.html</link><description>Recent content on Go Micro</description><generator>Hugo</generator><language>en</language><atom:link href="https://go-micro.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Adr 001 Plugin Architecture</title><link>https://go-micro.dev/docs/project/architecture/adr-001-plugin-architecture.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/project/architecture/adr-001-plugin-architecture.html</guid><description>&lt;h2 id="status"&gt;Status&lt;a class="td-heading-self-link" href="#status" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Accepted&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;a class="td-heading-self-link" href="#context" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Microservices frameworks need to support multiple infrastructure backends (registries, brokers, transports, stores). Different teams have different preferences and existing infrastructure.&lt;/p&gt;
&lt;p&gt;Hard-coding specific implementations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Limits framework adoption&lt;/li&gt;
&lt;li&gt;Forces migration of existing infrastructure&lt;/li&gt;
&lt;li&gt;Prevents innovation and experimentation&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="decision"&gt;Decision&lt;a class="td-heading-self-link" href="#decision" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro uses a &lt;strong&gt;pluggable architecture&lt;/strong&gt; where:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Core interfaces define contracts (Registry, Broker, Transport, Store, etc.)&lt;/li&gt;
&lt;li&gt;Multiple implementations live in the same repository under interface directories&lt;/li&gt;
&lt;li&gt;Plugins are imported directly and passed via options&lt;/li&gt;
&lt;li&gt;Default implementations work without any infrastructure&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="structure"&gt;Structure&lt;a class="td-heading-self-link" href="#structure" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;go-micro/
├── registry/ # Interface definition
│ ├── registry.go
│ ├── mdns.go # Default implementation
│ ├── consul/ # Plugin
│ ├── etcd/ # Plugin
│ └── nats/ # Plugin
├── broker/
├── transport/
└── store/
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="consequences"&gt;Consequences&lt;a class="td-heading-self-link" href="#consequences" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="positive"&gt;Positive&lt;a class="td-heading-self-link" href="#positive" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No version hell&lt;/strong&gt;: Plugins versioned with core framework&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Discovery&lt;/strong&gt;: Users browse available plugins in same repo&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistency&lt;/strong&gt;: All plugins follow same patterns&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing&lt;/strong&gt;: Plugins tested together&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero config&lt;/strong&gt;: Default implementations require no setup&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="negative"&gt;Negative&lt;a class="td-heading-self-link" href="#negative" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Repo size&lt;/strong&gt;: More code in one repository&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugin maintenance&lt;/strong&gt;: Core team responsible for plugin quality&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Breaking changes&lt;/strong&gt;: Harder to evolve individual plugins independently&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="neutral"&gt;Neutral&lt;a class="td-heading-self-link" href="#neutral" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Plugins can be extracted to separate repos if they grow complex&lt;/li&gt;
&lt;li&gt;Community can contribute plugins via PR&lt;/li&gt;
&lt;li&gt;Plugin-specific issues easier to triage&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="alternatives-considered"&gt;Alternatives Considered&lt;a class="td-heading-self-link" href="#alternatives-considered" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="separate-plugin-repositories"&gt;Separate Plugin Repositories&lt;a class="td-heading-self-link" href="#separate-plugin-repositories" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Used by go-kit and other frameworks. Rejected because:&lt;/p&gt;</description></item><item><title>Adr 004 Mdns Default Registry</title><link>https://go-micro.dev/docs/project/architecture/adr-004-mdns-default-registry.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/project/architecture/adr-004-mdns-default-registry.html</guid><description>&lt;h2 id="status"&gt;Status&lt;a class="td-heading-self-link" href="#status" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Accepted&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;a class="td-heading-self-link" href="#context" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Service discovery is critical for microservices. Common approaches:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Central registry&lt;/strong&gt; (Consul, Etcd) - Requires infrastructure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DNS-based&lt;/strong&gt; (Kubernetes DNS) - Platform-specific&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Static configuration&lt;/strong&gt; - Doesn&amp;rsquo;t scale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multicast DNS (mDNS)&lt;/strong&gt; - Zero-config, local network&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For local development and getting started, requiring infrastructure setup is a barrier. Production deployments typically have existing service discovery infrastructure.&lt;/p&gt;
&lt;h2 id="decision"&gt;Decision&lt;a class="td-heading-self-link" href="#decision" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Use &lt;strong&gt;mDNS as the default registry&lt;/strong&gt; for service discovery.&lt;/p&gt;</description></item><item><title>Adr 009 Progressive Configuration</title><link>https://go-micro.dev/docs/project/architecture/adr-009-progressive-configuration.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/project/architecture/adr-009-progressive-configuration.html</guid><description>&lt;h2 id="status"&gt;Status&lt;a class="td-heading-self-link" href="#status" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Accepted&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;a class="td-heading-self-link" href="#context" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Microservices frameworks face a paradox:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Beginners want &amp;ldquo;Hello World&amp;rdquo; to work immediately&lt;/li&gt;
&lt;li&gt;Production needs sophisticated configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Too simple: Framework is toy, not production-ready
Too complex: High barrier to entry, discourages adoption&lt;/p&gt;
&lt;h2 id="decision"&gt;Decision&lt;a class="td-heading-self-link" href="#decision" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Implement &lt;strong&gt;progressive configuration&lt;/strong&gt; where:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Zero config&lt;/strong&gt; works for development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment variables&lt;/strong&gt; provide simple overrides&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code-based options&lt;/strong&gt; enable fine-grained control&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Defaults are production-aware&lt;/strong&gt; but not production-ready&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="levels-of-configuration"&gt;Levels of Configuration&lt;a class="td-heading-self-link" href="#levels-of-configuration" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="level-1-zero-config-development"&gt;Level 1: Zero Config (Development)&lt;a class="td-heading-self-link" href="#level-1-zero-config-development" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Uses defaults:&lt;/p&gt;</description></item><item><title>Adr 010 Unified Gateway</title><link>https://go-micro.dev/docs/project/architecture/adr-010-unified-gateway.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/project/architecture/adr-010-unified-gateway.html</guid><description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Accepted
&lt;strong&gt;Date:&lt;/strong&gt; 2026-02-11
&lt;strong&gt;Authors:&lt;/strong&gt; Go Micro Team&lt;/p&gt;
&lt;h2 id="context"&gt;Context&lt;a class="td-heading-self-link" href="#context" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Previously, the go-micro CLI had two separate gateway implementations:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;micro run&lt;/code&gt;&lt;/strong&gt; gateway (&lt;code&gt;cmd/micro/run/gateway/&lt;/code&gt;) - Simple HTTP-to-RPC proxy for development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;micro server&lt;/code&gt;&lt;/strong&gt; gateway (&lt;code&gt;cmd/micro/server/&lt;/code&gt;) - Production gateway with authentication, web UI, and API documentation&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This duplication created several problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Code maintenance&lt;/strong&gt;: Gateway logic (HTTP-to-RPC translation, service discovery, health checks) was implemented twice&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature parity&lt;/strong&gt;: Improvements to one gateway didn&amp;rsquo;t automatically benefit the other&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complexity&lt;/strong&gt;: New features (like MCP integration) would need to be implemented twice&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing burden&lt;/strong&gt;: Each gateway required separate testing&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="decision"&gt;Decision&lt;a class="td-heading-self-link" href="#decision" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We unified the gateway implementation by:&lt;/p&gt;</description></item><item><title>Client Server</title><link>https://go-micro.dev/docs/interfaces/client-server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/interfaces/client-server.html</guid><description>&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;client&lt;/strong&gt; is used to make requests to other services.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;server&lt;/strong&gt; handles incoming requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both client and server are pluggable and support middleware wrappers for additional functionality.&lt;/p&gt;
&lt;h2 id="example-usage"&gt;Example Usage&lt;a class="td-heading-self-link" href="#example-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s how to define a simple handler and register it with a Go Micro server:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Greeter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Greeter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello, world!&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;greeter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RegisterHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Greeter&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Getting Started</title><link>https://go-micro.dev/docs/overview/getting-started.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/overview/getting-started.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label="Getting started with Go Micro"&gt;
 &lt;a href="https://go-micro.dev/docs/overview/getting-started/getting-started.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#f9fafa, #0c2948, #2465b9, #6491b6);"&gt;
 &lt;img
 alt="Getting started with Go Micro"
 title="Getting started with Go Micro"
 width="1200"
 height="800"srcset="https://go-micro.dev/docs/overview/getting-started/getting-started_hu_c05e585dd960375a.webp 420w, https://go-micro.dev/docs/overview/getting-started/getting-started_hu_9ba73f0edb63f542.webp 789w, https://go-micro.dev/docs/overview/getting-started/getting-started_hu_948df0649b496320.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/docs/overview/getting-started/getting-started_hu_ad8b581b4a82e9f4.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;Go Micro has three core abstractions:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Abstraction&lt;/th&gt;
					&lt;th&gt;What&lt;/th&gt;
					&lt;th&gt;Constructor&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Service&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Capability — endpoints, data, business logic&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro.NewService(&amp;quot;task&amp;quot;)&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Agent&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Intelligence — manages services with an LLM&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro.NewAgent(&amp;quot;task-mgr&amp;quot;)&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Flow&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Orchestration — event-driven LLM triggers&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro.NewFlow(&amp;quot;onboard&amp;quot;)&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="td-heading-self-link" href="#prerequisites" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Go 1.24+&lt;/strong&gt; for development. The &lt;code&gt;curl&lt;/code&gt; install below gives you the &lt;code&gt;micro&lt;/code&gt; binary without Go, but &lt;code&gt;micro run&lt;/code&gt; compiles your services, so you&amp;rsquo;ll want Go installed to build them.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;LLM provider key&lt;/strong&gt; (Anthropic, OpenAI, Gemini, …) &lt;em&gt;only&lt;/em&gt; for the AI features — &lt;code&gt;micro run --prompt&lt;/code&gt;, &lt;code&gt;micro chat&lt;/code&gt;, and agents. Plain services need no key. Set it before running, e.g. &lt;code&gt;export ANTHROPIC_API_KEY=sk-ant-...&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before your first provider-backed agent run, check the local path with:&lt;/p&gt;</description></item><item><title>Registry</title><link>https://go-micro.dev/docs/interfaces/registry.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/interfaces/registry.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label="Registry"&gt;
 &lt;a href="https://go-micro.dev/docs/interfaces/registry/registry.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#f9fbfc, #395ea9);"&gt;
 &lt;img
 alt="Registry"
 title="Registry"
 width="1200"
 height="800"srcset="https://go-micro.dev/docs/interfaces/registry/registry_hu_361ba57780b38549.webp 420w, https://go-micro.dev/docs/interfaces/registry/registry_hu_fd333042d738cc01.webp 789w, https://go-micro.dev/docs/interfaces/registry/registry_hu_65d5697476888c89.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/docs/interfaces/registry/registry_hu_8881564135664dac.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;a class="td-heading-self-link" href="#features" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Service registration and deregistration&lt;/li&gt;
&lt;li&gt;Service lookup&lt;/li&gt;
&lt;li&gt;Watch for changes&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;a class="td-heading-self-link" href="#implementations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro supports multiple registry backends, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MDNS (default)&lt;/li&gt;
&lt;li&gt;Consul&lt;/li&gt;
&lt;li&gt;Etcd&lt;/li&gt;
&lt;li&gt;NATS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can configure the registry when initializing your service.&lt;/p&gt;
&lt;h2 id="plugins-location"&gt;Plugins Location&lt;a class="td-heading-self-link" href="#plugins-location" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Registry plugins live in this repository under &lt;code&gt;go-micro.dev/v6/registry/&amp;lt;plugin&amp;gt;&lt;/code&gt; (e.g., &lt;code&gt;consul&lt;/code&gt;, &lt;code&gt;etcd&lt;/code&gt;, &lt;code&gt;nats&lt;/code&gt;). Import the desired package and pass it via &lt;code&gt;micro.Registry(...)&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>AI Integration</title><link>https://go-micro.dev/docs/overview/ai-integration.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/overview/ai-integration.html</guid><description>&lt;p&gt;Go Micro is an AI-native microservices framework. Every service you build is automatically accessible to AI agents, and every service can call AI models. This page explains how the pieces fit together.&lt;/p&gt;
&lt;p&gt;&lt;figure role="figure" aria-label="AI integration architecture"&gt;
 &lt;a href="https://go-micro.dev/docs/overview/ai-integration/mcp-agent.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#fbfbfd, #5751ca, #253148, #61a2ec);"&gt;
 &lt;img
 alt="AI integration architecture"
 title="AI integration architecture"
 width="1200"
 height="800"srcset="https://go-micro.dev/docs/overview/ai-integration/mcp-agent_hu_ba31eeb74bd933d8.webp 420w, https://go-micro.dev/docs/overview/ai-integration/mcp-agent_hu_f72d1b550800a11b.webp 789w, https://go-micro.dev/docs/overview/ai-integration/mcp-agent_hu_9bc95ecee8a0c523.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/docs/overview/ai-integration/mcp-agent_hu_7ee7cd86a98c8b0b.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;h2 id="the-stack"&gt;The Stack&lt;a class="td-heading-self-link" href="#the-stack" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Your Services → write Go handlers, register with the framework
 ↓
Registry → automatic service discovery (mDNS, Consul, etcd)
 ↓
Gateways → micro api (HTTP→RPC) / micro mcp (MCP tools)
 ↓
ai.Tools → discovers services + executes RPCs programmatically
 ↓
ai.Model → calls LLMs (Anthropic, OpenAI, Gemini, Atlas Cloud, ...)
 ↓
agent / flow / micro chat → agent-managed, event-driven, or interactive orchestration
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Every layer is optional. You can use go-micro without AI. You can use the &lt;code&gt;ai&lt;/code&gt; package without MCP. But when you stack them, you get services that AI agents can discover and orchestrate automatically.&lt;/p&gt;</description></item><item><title>Broker</title><link>https://go-micro.dev/docs/interfaces/broker.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/interfaces/broker.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label="Broker"&gt;
 &lt;a href="https://go-micro.dev/docs/interfaces/broker/broker.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#fafbfc, #2759b5, #ed9844, #ee7614);"&gt;
 &lt;img
 alt="Broker"
 title="Broker"
 width="1200"
 height="800"srcset="https://go-micro.dev/docs/interfaces/broker/broker_hu_a9586d7379d0c90c.webp 420w, https://go-micro.dev/docs/interfaces/broker/broker_hu_9b79fdc2980d11f8.webp 789w, https://go-micro.dev/docs/interfaces/broker/broker_hu_6991a4d6cf44a5d.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/docs/interfaces/broker/broker_hu_e170b75b16f6887b.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;a class="td-heading-self-link" href="#features" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Publish messages to topics&lt;/li&gt;
&lt;li&gt;Subscribe to topics&lt;/li&gt;
&lt;li&gt;Multiple broker implementations&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;a class="td-heading-self-link" href="#implementations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Supported brokers include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP (default)&lt;/li&gt;
&lt;li&gt;NATS (&lt;code&gt;go-micro.dev/v6/broker/nats&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;RabbitMQ (&lt;code&gt;go-micro.dev/v6/broker/rabbitmq&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Memory (&lt;code&gt;go-micro.dev/v6/broker/memory&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plugins are scoped under &lt;code&gt;go-micro.dev/v6/broker/&amp;lt;plugin&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Configure the broker in code or via environment variables.&lt;/p&gt;
&lt;h2 id="example-usage"&gt;Example Usage&lt;a class="td-heading-self-link" href="#example-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s how to use the broker in your Go Micro service:&lt;/p&gt;</description></item><item><title>Contributing</title><link>https://go-micro.dev/docs/project/contributing.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/project/contributing.html</guid><description>&lt;p&gt;This is a rendered copy of the repository &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; for convenient access via the documentation site.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro welcomes contributions of all kinds: code, documentation, examples, and plugins.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;a class="td-heading-self-link" href="#quick-start" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone --depth &lt;span class="m"&gt;1&lt;/span&gt; https://github.com/micro/go-micro.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; go-micro
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go mod download
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go &lt;span class="nb"&gt;test&lt;/span&gt; ./...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="process"&gt;Process&lt;a class="td-heading-self-link" href="#process" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Fork and create a feature branch&lt;/li&gt;
&lt;li&gt;Make focused changes with tests&lt;/li&gt;
&lt;li&gt;Run linting and full test suite&lt;/li&gt;
&lt;li&gt;Open a PR describing motivation and approach&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="commit-format"&gt;Commit Format&lt;a class="td-heading-self-link" href="#commit-format" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Use conventional commits:&lt;/p&gt;</description></item><item><title>Transport</title><link>https://go-micro.dev/docs/interfaces/transport.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/interfaces/transport.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label="Transport"&gt;
 &lt;a href="https://go-micro.dev/docs/interfaces/transport/transport.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#f9fafb, #15335a, #1c64bb, #529fe7);"&gt;
 &lt;img
 alt="Transport"
 title="Transport"
 width="1200"
 height="800"srcset="https://go-micro.dev/docs/interfaces/transport/transport_hu_b0d9876d30e32af8.webp 420w, https://go-micro.dev/docs/interfaces/transport/transport_hu_c0cb8131af8cda0e.webp 789w, https://go-micro.dev/docs/interfaces/transport/transport_hu_975c1b0a1fec43bc.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/docs/interfaces/transport/transport_hu_c92d7a33b5580651.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;a class="td-heading-self-link" href="#features" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pluggable transport implementations&lt;/li&gt;
&lt;li&gt;Secure and efficient communication&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;a class="td-heading-self-link" href="#implementations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Supported transports include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP (default)&lt;/li&gt;
&lt;li&gt;NATS (&lt;code&gt;go-micro.dev/v6/transport/nats&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;gRPC (&lt;code&gt;go-micro.dev/v6/transport/grpc&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Memory (&lt;code&gt;go-micro.dev/v6/transport/memory&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="important-transport-vs-native-grpc"&gt;Important: Transport vs Native gRPC&lt;a class="td-heading-self-link" href="#important-transport-vs-native-grpc" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The gRPC &lt;strong&gt;transport&lt;/strong&gt; uses gRPC as an underlying communication protocol, similar to how NATS or RabbitMQ might be used. It does &lt;strong&gt;not&lt;/strong&gt; provide native gRPC compatibility with tools like &lt;code&gt;grpcurl&lt;/code&gt; or standard gRPC clients generated by &lt;code&gt;protoc&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Roadmap</title><link>https://go-micro.dev/docs/project/roadmap.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/project/roadmap.html</guid><description>&lt;p&gt;Go Micro is a framework for building &lt;strong&gt;agents and services&lt;/strong&gt; in Go. An agent is a distributed system — it discovers services, calls them, holds state, and recovers from failure — so building an agent is building a service. The roadmap has two jobs: make &lt;strong&gt;agentic development&lt;/strong&gt; excellent, and make the &lt;strong&gt;developer experience&lt;/strong&gt; around it excellent. Nothing else.&lt;/p&gt;
&lt;h2 id="where-we-are-v6"&gt;Where we are (v6)&lt;a class="td-heading-self-link" href="#where-we-are-v6" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The foundation is in place:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Services&lt;/strong&gt; — register, discover, RPC, events; every endpoint is automatically an MCP tool.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agents&lt;/strong&gt; — a model with memory and tools that manages services, with &lt;code&gt;plan&lt;/code&gt;, &lt;code&gt;delegate&lt;/code&gt;, and guardrails (&lt;code&gt;MaxSteps&lt;/code&gt;, &lt;code&gt;LoopLimit&lt;/code&gt;, &lt;code&gt;ApproveTool&lt;/code&gt;) built in, plus tool-execution middleware (&lt;code&gt;WrapTool&lt;/code&gt;) and run metadata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flows&lt;/strong&gt; — durable, event-driven workflows: ordered steps that checkpoint and resume after a crash.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interop&lt;/strong&gt; — the MCP gateway (services as tools) and the A2A gateway (agents as agents, both directions, including A2A streaming, push notifications, and multi-turn continuation), both generated from the registry; x402 for paid tools.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secure by default&lt;/strong&gt; — TLS verification on, state scoped per component.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="principles"&gt;Principles&lt;a class="td-heading-self-link" href="#principles" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These constrain everything below:&lt;/p&gt;</description></item><item><title>Store</title><link>https://go-micro.dev/docs/interfaces/store.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/interfaces/store.html</guid><description>&lt;h2 id="features"&gt;Features&lt;a class="td-heading-self-link" href="#features" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Key-value storage&lt;/li&gt;
&lt;li&gt;Multiple backend support&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;a class="td-heading-self-link" href="#implementations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Supported stores include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memory (default)&lt;/li&gt;
&lt;li&gt;File (&lt;code&gt;go-micro.dev/v6/store/file&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;MySQL (&lt;code&gt;go-micro.dev/v6/store/mysql&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Postgres (&lt;code&gt;go-micro.dev/v6/store/postgres&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;NATS JetStream KV (&lt;code&gt;go-micro.dev/v6/store/nats-js-kv&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plugins are scoped under &lt;code&gt;go-micro.dev/v6/store/&amp;lt;plugin&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Configure the store in code or via environment variables.&lt;/p&gt;
&lt;h2 id="example-usage"&gt;Example Usage&lt;a class="td-heading-self-link" href="#example-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s how to use the store in your Go Micro service:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/store&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;store-example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Write a record&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Record&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="nb"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;bar&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)});&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Read a record&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;recs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Read value: %s&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;recs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configure-a-specific-store-in-code"&gt;Configure a specific store in code&lt;a class="td-heading-self-link" href="#configure-a-specific-store-in-code" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Postgres:&lt;/p&gt;</description></item><item><title>Powered by Go Micro Badge</title><link>https://go-micro.dev/docs/project/badge.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/project/badge.html</guid><description>&lt;h2 id="markdown-badges"&gt;Markdown Badges&lt;a class="td-heading-self-link" href="#markdown-badges" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="dark-badge"&gt;Dark Badge&lt;a class="td-heading-self-link" href="#dark-badge" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;a href="https://go-micro.dev" target="_blank"&gt;
&lt;img src="https://img.shields.io/badge/Powered%20by-Go%20Micro-0366d6?style=for-the-badge&amp;amp;logo=go&amp;amp;logoColor=white" alt="Powered by Go Micro"&gt;
&lt;/a&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[&lt;span class="nt"&gt;![Powered by Go Micro&lt;/span&gt;](&lt;span class="na"&gt;https://img.shields.io/badge/Powered%20by-Go%20Micro-0366d6?style=for-the-badge&amp;amp;logo=go&amp;amp;logoColor=white&lt;/span&gt;)](https://go-micro.dev)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="light-badge"&gt;Light Badge&lt;a class="td-heading-self-link" href="#light-badge" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;a href="https://go-micro.dev" target="_blank"&gt;
&lt;img src="https://img.shields.io/badge/Powered%20by-Go%20Micro-00ADD8?style=flat&amp;amp;logo=go&amp;amp;logoColor=white" alt="Powered by Go Micro"&gt;
&lt;/a&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[&lt;span class="nt"&gt;![Powered by Go Micro&lt;/span&gt;](&lt;span class="na"&gt;https://img.shields.io/badge/Powered%20by-Go%20Micro-00ADD8?style=flat&amp;amp;logo=go&amp;amp;logoColor=white&lt;/span&gt;)](https://go-micro.dev)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="compact-badge"&gt;Compact Badge&lt;a class="td-heading-self-link" href="#compact-badge" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;a href="https://go-micro.dev" target="_blank"&gt;
&lt;img src="https://img.shields.io/badge/Go-Micro-0366d6?style=flat-square" alt="Go Micro"&gt;
&lt;/a&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[&lt;span class="nt"&gt;![Go Micro&lt;/span&gt;](&lt;span class="na"&gt;https://img.shields.io/badge/Go-Micro-0366d6?style=flat-square&lt;/span&gt;)](https://go-micro.dev)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="html-badges"&gt;HTML Badges&lt;a class="td-heading-self-link" href="#html-badges" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="standard-html-badge"&gt;Standard HTML Badge&lt;a class="td-heading-self-link" href="#standard-html-badge" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;a href="https://go-micro.dev" target="_blank"&gt;
 &lt;img src="https://img.shields.io/badge/Powered%20by-Go%20Micro-0366d6?style=for-the-badge&amp;logo=go&amp;logoColor=white" alt="Powered by Go Micro"&gt;
&lt;/a&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://go-micro.dev&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;_blank&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://img.shields.io/badge/Powered%20by-Go%20Micro-0366d6?style=for-the-badge&amp;amp;logo=go&amp;amp;logoColor=white&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Powered by Go Micro&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="custom-svg-badge"&gt;Custom SVG Badge&lt;a class="td-heading-self-link" href="#custom-svg-badge" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;a href="https://go-micro.dev" style="display:inline-block;text-decoration:none;"&gt;
 &lt;svg width="160" height="32" xmlns="http://www.w3.org/2000/svg"&gt;
 &lt;rect width="160" height="32" rx="6" fill="#0366d6"/&gt;
 &lt;text x="16" y="21" font-family="system-ui,-apple-system,sans-serif" font-size="13" font-weight="600" fill="white"&gt;
 Powered by Go Micro
 &lt;/text&gt;
 &lt;/svg&gt;
&lt;/a&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://go-micro.dev&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;display:inline-block;text-decoration:none;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;svg&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;160&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;32&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;xmlns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://www.w3.org/2000/svg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;rect&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;160&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;32&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;rx&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;6&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;fill&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#0366d6&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;text&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;16&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;21&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;font-family&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;system-ui,-apple-system,sans-serif&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;font-size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;13&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;font-weight&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;600&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;fill&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;white&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Powered by Go Micro
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;svg&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="usage"&gt;Usage&lt;a class="td-heading-self-link" href="#usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Add one of these badges to your README.md, documentation, or website footer to show that your project uses Go Micro.&lt;/p&gt;</description></item><item><title>Plugins</title><link>https://go-micro.dev/docs/interfaces/plugins.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/interfaces/plugins.html</guid><description>&lt;p&gt;Common interfaces and locations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registry: &lt;code&gt;go-micro.dev/v6/registry/*&lt;/code&gt; (e.g. &lt;code&gt;consul&lt;/code&gt;, &lt;code&gt;etcd&lt;/code&gt;, &lt;code&gt;nats&lt;/code&gt;, &lt;code&gt;mdns&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Broker: &lt;code&gt;go-micro.dev/v6/broker/*&lt;/code&gt; (e.g. &lt;code&gt;nats&lt;/code&gt;, &lt;code&gt;rabbitmq&lt;/code&gt;, &lt;code&gt;http&lt;/code&gt;, &lt;code&gt;memory&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Transport: &lt;code&gt;go-micro.dev/v6/transport/*&lt;/code&gt; (e.g. &lt;code&gt;nats&lt;/code&gt;, default &lt;code&gt;http&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Server: &lt;code&gt;go-micro.dev/v6/server/*&lt;/code&gt; (e.g. &lt;code&gt;grpc&lt;/code&gt; for native gRPC compatibility)&lt;/li&gt;
&lt;li&gt;Client: &lt;code&gt;go-micro.dev/v6/client/*&lt;/code&gt; (e.g. &lt;code&gt;grpc&lt;/code&gt; for native gRPC compatibility)&lt;/li&gt;
&lt;li&gt;Store: &lt;code&gt;go-micro.dev/v6/store/*&lt;/code&gt; (e.g. &lt;code&gt;postgres&lt;/code&gt;, &lt;code&gt;mysql&lt;/code&gt;, &lt;code&gt;nats-js-kv&lt;/code&gt;, &lt;code&gt;memory&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Auth, Cache, etc. follow the same pattern under their respective directories.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="registry-examples"&gt;Registry Examples&lt;a class="td-heading-self-link" href="#registry-examples" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Consul:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/registry/consul&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;reg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;consul&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewConsulRegistry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;plugin-example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Registry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reg&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Etcd:&lt;/p&gt;</description></item><item><title>MCP &amp; AI Agents</title><link>https://go-micro.dev/docs/overview/mcp.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/overview/mcp.html</guid><description>&lt;h2 id="model-context-protocol-mcp"&gt;Model Context Protocol (MCP)&lt;a class="td-heading-self-link" href="#model-context-protocol-mcp" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro provides built-in support for the &lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol (MCP)&lt;/a&gt;, enabling AI agents like Claude to discover and interact with your microservices as tools.&lt;/p&gt;
&lt;p&gt;&lt;figure role="figure" aria-label="AI agent calling microservices via MCP"&gt;
 &lt;a href="https://go-micro.dev/docs/overview/mcp/mcp-agent.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#fbfbfd, #5751ca, #253148, #61a2ec);"&gt;
 &lt;img
 alt="AI agent calling microservices via MCP"
 title="AI agent calling microservices via MCP"
 width="1200"
 height="800"srcset="https://go-micro.dev/docs/overview/mcp/mcp-agent_hu_ba31eeb74bd933d8.webp 420w, https://go-micro.dev/docs/overview/mcp/mcp-agent_hu_f72d1b550800a11b.webp 789w, https://go-micro.dev/docs/overview/mcp/mcp-agent_hu_9bc95ecee8a0c523.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/docs/overview/mcp/mcp-agent_hu_7ee7cd86a98c8b0b.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;MCP gateway automatically exposes your microservices as AI-accessible tools through:&lt;/p&gt;</description></item><item><title>Server (optional)</title><link>https://go-micro.dev/docs/project/server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/project/server.html</guid><description>&lt;h1 id="micro-server-optional"&gt;Micro Server (Optional)&lt;a class="td-heading-self-link" href="#micro-server-optional" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The Micro server is an optional web dashboard and authenticated API gateway for production environments. It provides a secure entrypoint for discovering and interacting with services that are already running (e.g., managed by systemd via &lt;code&gt;micro deploy&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;micro server&lt;/code&gt; does not build, run, or watch services.&lt;/strong&gt; It only discovers services via the registry and provides a UI/API to interact with them.&lt;/p&gt;
&lt;h2 id="micro-server-vs-micro-run"&gt;micro server vs micro run&lt;a class="td-heading-self-link" href="#micro-server-vs-micro-run" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;&lt;code&gt;micro run&lt;/code&gt;&lt;/th&gt;
					&lt;th&gt;&lt;code&gt;micro server&lt;/code&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Purpose&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Local development&lt;/td&gt;
					&lt;td&gt;Production dashboard&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Builds services&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Runs services&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (as child processes)&lt;/td&gt;
					&lt;td&gt;No (discovers already-running services)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Hot reload&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Authentication&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (default &lt;code&gt;admin&lt;/code&gt;/&lt;code&gt;micro&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;Yes (default &lt;code&gt;admin&lt;/code&gt;/&lt;code&gt;micro&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Scopes&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (&lt;code&gt;/auth/scopes&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;Yes (&lt;code&gt;/auth/scopes&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Full gateway UI with auth, scopes, agent&lt;/td&gt;
					&lt;td&gt;Full dashboard with API explorer, logs, user/token management&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;When to use&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Day-to-day development&lt;/td&gt;
					&lt;td&gt;Deployed environments, shared servers&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For local development, use &lt;a href="guides/micro-run"&gt;&lt;code&gt;micro run&lt;/code&gt;&lt;/a&gt; instead.&lt;/p&gt;</description></item><item><title>Deploying Go Micro Services</title><link>https://go-micro.dev/docs/overview/deployment.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/overview/deployment.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label="Go Micro deployment"&gt;
 &lt;a href="https://go-micro.dev/docs/overview/deployment/deployment.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#f8f9fa, #343f4e);"&gt;
 &lt;img
 alt="Go Micro deployment"
 title="Go Micro deployment"
 width="1200"
 height="800"srcset="https://go-micro.dev/docs/overview/deployment/deployment_hu_cd3632b2febdde06.webp 420w, https://go-micro.dev/docs/overview/deployment/deployment_hu_97155c3ee79b34e9.webp 789w, https://go-micro.dev/docs/overview/deployment/deployment_hu_23cf7c7384e0a335.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/docs/overview/deployment/deployment_hu_e5fe382058eded73.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;This guide covers deploying go-micro services to a Linux server using systemd.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;go-micro provides a clear workflow from development to production:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Stage&lt;/th&gt;
					&lt;th&gt;Command&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Develop&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro run&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Local dev with hot reload and API gateway&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Build&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro build&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Compile production binaries for any target OS&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Deploy&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro deploy&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Push binaries to a remote Linux server via SSH + systemd&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro server&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Optional production web UI with JWT auth and user management&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Each command has a distinct role — they don&amp;rsquo;t overlap:&lt;/p&gt;</description></item><item><title>Architecture</title><link>https://go-micro.dev/docs/overview/architecture.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/overview/architecture.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label="Go Micro architecture"&gt;
 &lt;a href="https://go-micro.dev/docs/overview/architecture/architecture.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#fafcfc, #4a9cab);"&gt;
 &lt;img
 alt="Go Micro architecture"
 title="Go Micro architecture"
 width="1200"
 height="800"srcset="https://go-micro.dev/docs/overview/architecture/architecture_hu_aa2c2748d28f7925.webp 420w, https://go-micro.dev/docs/overview/architecture/architecture_hu_6ec28a2136c777bc.webp 789w, https://go-micro.dev/docs/overview/architecture/architecture_hu_ef55cd436480e300.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/docs/overview/architecture/architecture_hu_1f3bda2fe3a95b12.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;An overview of the Go Micro architecture.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro abstracts away the details of distributed systems. Here are the main features.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Authentication&lt;/strong&gt; - Auth is built in as a first class citizen. Authentication and authorization enable secure
zero trust networking by providing every service an identity and certificates. This additionally includes rule
based access control.&lt;/p&gt;</description></item><item><title>Configuration</title><link>https://go-micro.dev/docs/overview/config.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/overview/config.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label="Configuration"&gt;
 &lt;a href="https://go-micro.dev/docs/overview/config/config.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#fafcfd, #4f9dc5, #316db5);"&gt;
 &lt;img
 alt="Configuration"
 title="Configuration"
 width="1200"
 height="800"srcset="https://go-micro.dev/docs/overview/config/config_hu_cfe61e0889fa405c.webp 420w, https://go-micro.dev/docs/overview/config/config_hu_9970dc5116a634d0.webp 789w, https://go-micro.dev/docs/overview/config/config_hu_8ebc9ff0aa41a60a.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/docs/overview/config/config_hu_952fb3d2bcd9a5b0.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;Go Micro follows a progressive configuration model so you can start with zero setup and layer in complexity only when needed.&lt;/p&gt;
&lt;h2 id="levels-of-configuration"&gt;Levels of Configuration&lt;a class="td-heading-self-link" href="#levels-of-configuration" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Zero Config (Defaults)
&lt;ul&gt;
&lt;li&gt;mDNS registry, HTTP transport, in-memory broker/store&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Environment Variables
&lt;ul&gt;
&lt;li&gt;Override core components without code changes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Code Options
&lt;ul&gt;
&lt;li&gt;Fine-grained control via functional options&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;External Sources (Future / Plugins)
&lt;ul&gt;
&lt;li&gt;Configuration loaded from files, vaults, or remote services&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="core-environment-variables"&gt;Core Environment Variables&lt;a class="td-heading-self-link" href="#core-environment-variables" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Component&lt;/th&gt;
					&lt;th&gt;Variable&lt;/th&gt;
					&lt;th&gt;Example&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Registry&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_REGISTRY&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_REGISTRY=consul&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select registry implementation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Registry Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_REGISTRY_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_REGISTRY_ADDRESS=127.0.0.1:8500&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Point to registry service&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Broker&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_BROKER&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_BROKER=nats&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select broker implementation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Broker Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_BROKER_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_BROKER_ADDRESS=nats://localhost:4222&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Broker endpoint&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Transport&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_TRANSPORT&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_TRANSPORT=nats&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select transport implementation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Transport Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_TRANSPORT_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_TRANSPORT_ADDRESS=nats://localhost:4222&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Transport endpoint&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Store&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE=postgres&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select store implementation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Store Database&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_DATABASE&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_DATABASE=app&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Logical database name&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Store Table&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_TABLE&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_TABLE=records&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Default table/collection&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Store Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_ADDRESS=postgres://user:pass@localhost:5432/app?sslmode=disable&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Connection string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Server Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_SERVER_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_SERVER_ADDRESS=:8080&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Bind address for RPC server&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="example-switching-components-via-env-vars"&gt;Example: Switching Components via Env Vars&lt;a class="td-heading-self-link" href="#example-switching-components-via-env-vars" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Use NATS for broker and transport, Consul for registry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;MICRO_BROKER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nats
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;MICRO_TRANSPORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nats
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;MICRO_REGISTRY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;consul
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;MICRO_REGISTRY_ADDRESS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;127.0.0.1:8500
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Run your service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go run main.go
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;No code changes required. The framework internally wires the selected implementations.&lt;/p&gt;</description></item><item><title>Observability</title><link>https://go-micro.dev/docs/overview/observability.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/overview/observability.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label="Observability"&gt;
 &lt;a href="https://go-micro.dev/docs/overview/observability/observability.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#fafbfb, #316ed1);"&gt;
 &lt;img
 alt="Observability"
 title="Observability"
 width="1200"
 height="800"srcset="https://go-micro.dev/docs/overview/observability/observability_hu_c35ef65da993d86.webp 420w, https://go-micro.dev/docs/overview/observability/observability_hu_997817932a35fcea.webp 789w, https://go-micro.dev/docs/overview/observability/observability_hu_e9f359535b4a4444.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/docs/overview/observability/observability_hu_551bcce23f3483fe.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;Observability in Go Micro spans logs, metrics, and traces. The goal is rapid insight into service behavior with minimal configuration.&lt;/p&gt;
&lt;h2 id="core-principles"&gt;Core Principles&lt;a class="td-heading-self-link" href="#core-principles" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Structured Logs – Machine-parsable, leveled output&lt;/li&gt;
&lt;li&gt;Metrics – Quantitative trends (counters, gauges, histograms)&lt;/li&gt;
&lt;li&gt;Traces – Request flows across service boundaries&lt;/li&gt;
&lt;li&gt;Correlation – IDs flowing through all three signals&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="logging"&gt;Logging&lt;a class="td-heading-self-link" href="#logging" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The default logger can be replaced. Use env vars to adjust level:&lt;/p&gt;</description></item><item><title>Hosting Go Micro Services</title><link>https://go-micro.dev/docs/overview/hosting.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/overview/hosting.html</guid><description>&lt;blockquote&gt;
&lt;p&gt;Go Micro services are compiled Go binaries that communicate via RPC and event-driven messaging. Hosting them requires infrastructure that supports service discovery, inter-service communication, persistent storage, and configuration management. Because go-micro uses a pluggable architecture, the hosting environment can range from a single VPS to a fully orchestrated cluster.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="current-hosting-options"&gt;Current Hosting Options&lt;a class="td-heading-self-link" href="#current-hosting-options" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="single-vps-or-bare-metal"&gt;Single VPS or Bare Metal&lt;a class="td-heading-self-link" href="#single-vps-or-bare-metal" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The simplest approach. Deploy compiled binaries to a Linux server and manage them with systemd. This is the model described in the &lt;a href="https://go-micro.dev/docs/overview/deployment.html"&gt;Deployment Guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Performance Considerations</title><link>https://go-micro.dev/docs/overview/performance.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/overview/performance.html</guid><description>&lt;blockquote&gt;
&lt;p&gt;go-micro is designed for &lt;strong&gt;developer productivity and ease of use&lt;/strong&gt; while maintaining good performance for most use cases. This document explains the performance characteristics and trade-offs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="reflection-usage"&gt;Reflection Usage&lt;a class="td-heading-self-link" href="#reflection-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;go-micro uses Go&amp;rsquo;s reflection package to enable its core feature: &lt;strong&gt;registering any Go struct as a service handler&lt;/strong&gt; without code generation or boilerplate.&lt;/p&gt;
&lt;h3 id="why-reflection"&gt;Why Reflection?&lt;a class="td-heading-self-link" href="#why-reflection" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Simple handler registration - no proto files, no code generation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GreeterService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;GreeterService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SayHello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello &amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;GreeterService&lt;/span&gt;&lt;span class="p"&gt;{}))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This simplicity is &lt;strong&gt;only possible with reflection&lt;/strong&gt;. Alternative approaches (like gRPC or psrpc) require:&lt;/p&gt;</description></item><item><title>What's New in Go Micro: v6.6.0</title><link>https://go-micro.dev/blog/2026/07/11/v6-6-0.html</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/07/11/v6-6-0.html</guid><description>&lt;p&gt;Go Micro v6.6.0 is a harness reliability release. The theme is the same services → agents → workflows lifecycle, but with more of the first-agent path covered by local checks and more recovery paths made deterministic when agents resume, retry, delegate, or notify.&lt;/p&gt;
&lt;h2 id="the-first-agent-path-is-harder-to-break"&gt;The first-agent path is harder to break&lt;a class="td-heading-self-link" href="#the-first-agent-path-is-harder-to-break" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The README, website docs, examples, and 0→hero guide chain now have more harness coverage. The CLI and docs keep the path from install troubleshooting through &lt;code&gt;micro agent demo&lt;/code&gt;, quickcheck, examples, the smallest first-agent, debugging, and 0→hero in one consistent order.&lt;/p&gt;</description></item><item><title>What's New in Go Micro: v6.3.15</title><link>https://go-micro.dev/blog/2026/07/05/v6-3-15.html</link><pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/07/05/v6-3-15.html</guid><description>&lt;p&gt;Go Micro v6.3.15 is a small but useful harness release: less friction for the first agent, better streaming provider coverage, and more reliable execution when models and delegates do not behave perfectly.&lt;/p&gt;
&lt;h2 id="anthropic-now-streams"&gt;Anthropic now streams&lt;a class="td-heading-self-link" href="#anthropic-now-streams" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Anthropic provider now supports Messages SSE streaming and is registered as a streaming-capable provider. That means Go Micro agents can use Anthropic in the same streaming path as the other streaming-capable providers, with request/response parser coverage and provider capability docs kept in sync.&lt;/p&gt;</description></item><item><title>The Loop, Shipped: Introducing micro loop</title><link>https://go-micro.dev/blog/2026/07/02/the-loop-shipped-introducing-micro-loop.html</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/07/02/the-loop-shipped-introducing-micro-loop.html</guid><description>&lt;p&gt;A few weeks ago we wrote &lt;a href="https://go-micro.dev/blog/2026/06/25/how-go-micro-builds-itself/"&gt;How Go Micro Builds Itself&lt;/a&gt;: a loop of two AI agents — Codex writing scoped increments, Claude Code orchestrating and reviewing, a human setting direction — kept honest by CI. It was our own thesis, &lt;em&gt;an agent operating a system&lt;/em&gt;, pointed at the repository that defines the thesis.&lt;/p&gt;
&lt;p&gt;People asked the obvious question: &lt;strong&gt;can I run that on my repo?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now you can. &lt;code&gt;micro loop init&lt;/code&gt; drops the whole pipeline into any repository, and — the part that makes it real rather than aspirational — Go Micro itself now runs on it. The workflows that maintain this project are generated by the same command we&amp;rsquo;re shipping to you.&lt;/p&gt;</description></item><item><title>An Agent Is a Service: Where Agent Frameworks Are Going</title><link>https://go-micro.dev/blog/2026/06/30/an-agent-is-a-service-where-agent-frameworks-are-going.html</link><pubDate>Tue, 30 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/30/an-agent-is-a-service-where-agent-frameworks-are-going.html</guid><description>&lt;p&gt;There are now a lot of ways to build an agent. LangChain and LangGraph, LlamaIndex, CrewAI, Microsoft&amp;rsquo;s AutoGen, Google&amp;rsquo;s ADK, the model labs&amp;rsquo; own SDKs, and — most recently in our own backyard — &lt;a href="https://github.com/trpc-group/trpc-agent-go"&gt;tRPC-Agent-Go&lt;/a&gt; from Tencent. They are not all solving the same problem, and the places they differ tell you a lot about where this is heading.&lt;/p&gt;
&lt;p&gt;This is a field guide to that landscape, and an honest account of where Go Micro sits in it.&lt;/p&gt;</description></item><item><title>How Go Micro Builds Itself</title><link>https://go-micro.dev/blog/2026/06/25/how-go-micro-builds-itself.html</link><pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/25/how-go-micro-builds-itself.html</guid><description>&lt;p&gt;Go Micro is an agent harness. The most honest test of that claim is to use agents to build it — so increasingly, we do. A scheduled loop of two AI agents now opens issues, writes increments, and merges its own pull requests against this repo, on a cadence, with a human setting direction rather than typing the code.&lt;/p&gt;
&lt;p&gt;This isn&amp;rsquo;t a stunt. If a harness is good enough to operate a loop that builds itself, that&amp;rsquo;s evidence it&amp;rsquo;s good enough to operate the loop that builds &lt;em&gt;your&lt;/em&gt; software. So we pointed the thesis at itself and wired up the loop. This post is how it actually works — including the parts that didn&amp;rsquo;t, because the failure modes are the interesting part.&lt;/p&gt;</description></item><item><title>Go Micro is an Agent Harness</title><link>https://go-micro.dev/blog/2026/06/24/go-micro-is-an-agent-harness.html</link><pubDate>Wed, 24 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/24/go-micro-is-an-agent-harness.html</guid><description>&lt;p&gt;The first wave of agent frameworks solved one problem: put a model in a loop with some tools. That&amp;rsquo;s the easy part now. The harder problem — the one that decides whether an agent makes it past a demo — is &lt;strong&gt;operating&lt;/strong&gt; that loop.&lt;/p&gt;
&lt;p&gt;Operating a loop means connecting it to real tools, scoping what it can touch, keeping state when the process restarts, routing work to specialists, recovering from provider failures, seeing what it did, and letting other agents call it. That&amp;rsquo;s harness work, and it&amp;rsquo;s most of the actual job.&lt;/p&gt;</description></item><item><title>Go Micro Joins OpenAI's Codex for Open Source</title><link>https://go-micro.dev/blog/2026/06/23/go-micro-joins-openai-s-codex-for-open-source.html</link><pubDate>Tue, 23 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/23/go-micro-joins-openai-s-codex-for-open-source.html</guid><description>&lt;p&gt;Go Micro has been accepted into &lt;strong&gt;OpenAI&amp;rsquo;s Codex for Open Source&lt;/strong&gt; program. OpenAI is covering six months of ChatGPT Pro — and with it, access to Codex — to support the day-to-day work of maintaining the project.&lt;/p&gt;
&lt;h2 id="what-the-grant-is"&gt;What the grant is&lt;a class="td-heading-self-link" href="#what-the-grant-is" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Codex for Open Source backs maintainers directly: the constant, unglamorous work of reviewing changes, cutting releases, triaging issues, and keeping quality high. That&amp;rsquo;s most of what maintaining a framework actually is, and it&amp;rsquo;s the part that rarely gets funded. OpenAI putting Codex against it is a real, practical help.&lt;/p&gt;</description></item><item><title>Building a Support Agent in Go</title><link>https://go-micro.dev/blog/2026/06/19/building-a-support-agent-in-go.html</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/19/building-a-support-agent-in-go.html</guid><description>&lt;p&gt;Most agent demos are a chat box wired to one tool. Real systems aren&amp;rsquo;t that — they&amp;rsquo;re a handful of services, an agent that operates them, something that triggers the agent without a human typing, and a gate on the actions you don&amp;rsquo;t want it taking on its own. Here&amp;rsquo;s that, built end to end. The full code is in &lt;a href="https://github.com/micro/go-micro/tree/master/examples/support"&gt;&lt;code&gt;examples/support&lt;/code&gt;&lt;/a&gt;; it runs with no API key.&lt;/p&gt;
&lt;p&gt;The scenario: a customer files a ticket. That should trigger an agent to look the customer up, set a priority, and reply — but it must not email anyone without passing an approval gate.&lt;/p&gt;</description></item><item><title>Agents Across Frameworks: A2A</title><link>https://go-micro.dev/blog/2026/06/18/agents-across-frameworks-a2a.html</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/18/agents-across-frameworks-a2a.html</guid><description>&lt;p&gt;Inside a Go Micro system, agents already talk to each other. An agent is a service with an &lt;code&gt;Agent.Chat&lt;/code&gt; endpoint, so &lt;code&gt;delegate&lt;/code&gt; just calls another agent over RPC. That works as long as everyone is on Go Micro. The moment an agent is built on a different framework, the conversation stops: it can&amp;rsquo;t call yours, and yours can&amp;rsquo;t call it.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://a2a-protocol.org"&gt;A2A&lt;/a&gt; — the open Agent2Agent protocol — is the standard that closes that gap, and Go Micro now speaks it.&lt;/p&gt;</description></item><item><title>Bringing an Open Source Project Back from the Dead</title><link>https://go-micro.dev/blog/2026/06/18/bringing-an-open-source-project-back-from-the-dead.html</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/18/bringing-an-open-source-project-back-from-the-dead.html</guid><description>&lt;p&gt;I open sourced Go Micro in January 2015. Eleven years later we just tagged v6. What a crazy and surreal experience that is. the project was basically dead or sitting stale for quite some time after VC funding dried up, I shutdown the business and tried to hand off to the community. So much has happened in that time and I&amp;rsquo;ve learned a lot of lessons. Like how to be grateful for what you had when you had it.&lt;/p&gt;</description></item><item><title>Go Micro is Becoming a Framework for Agentic Development</title><link>https://go-micro.dev/blog/2026/06/17/go-micro-is-becoming-a-framework-for-agentic-development.html</link><pubDate>Wed, 17 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/17/go-micro-is-becoming-a-framework-for-agentic-development.html</guid><description>&lt;p&gt;When Anthropic began sponsoring Go Micro, we committed to building in the open and reporting progress as it happened. It has been three months. Each post so far covered one change; this one is about what they add up to. &lt;strong&gt;Go Micro is becoming a framework for agentic development, the same way it has been a framework for services for the last decade.&lt;/strong&gt; It&amp;rsquo;s an extension of the existing framework, not a rewrite, because an agent is a distributed system and Go Micro is how you build one.&lt;/p&gt;</description></item><item><title>Durable Workflows</title><link>https://go-micro.dev/blog/2026/06/17/durable-workflows.html</link><pubDate>Wed, 17 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/17/durable-workflows.html</guid><description>&lt;p&gt;A workflow that calls real services is rarely instant and rarely side-effect-free. It reserves inventory at step one, charges a card at step two, sends a confirmation at step three. Each of those changes the world. So when the process dies between step two and step three — a deploy, an OOM, a node going away — you can&amp;rsquo;t just run it again from the top: that reserves twice and charges twice. And if the workflow was triggered by an event with no human watching, nobody noticed it died at all.&lt;/p&gt;</description></item><item><title>Agent Guardrails</title><link>https://go-micro.dev/blog/2026/06/16/agent-guardrails.html</link><pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/16/agent-guardrails.html</guid><description>&lt;p&gt;The interesting failures of an autonomous agent aren&amp;rsquo;t dramatic. It calls the same tool with the same arguments over and over, making no progress. It takes thirty steps on a task that needed three, quietly running up cost. It performs an action that a human, or a policy, should have stood in front of. When an agent &lt;a href="https://go-micro.dev/blog/2026/06/15/when-the-event-is-the-prompt/"&gt;runs on its own&lt;/a&gt;, there&amp;rsquo;s no one watching to catch any of it.&lt;/p&gt;
&lt;p&gt;A useful way to think about this — which came up in a community discussion recently — is to separate &lt;strong&gt;orchestration&lt;/strong&gt; from &lt;strong&gt;execution safety&lt;/strong&gt;. The model decides what to do; that&amp;rsquo;s orchestration. Whether a decided action is actually allowed to run is a separate concern, and it shouldn&amp;rsquo;t be tangled into the model or the services. Go Micro keeps them apart: every tool call an agent makes passes through one choke point, and that&amp;rsquo;s where the guardrails live. They apply uniformly to service calls, custom tools, and &lt;code&gt;delegate&lt;/code&gt;, and they touch neither the model nor your services.&lt;/p&gt;</description></item><item><title>Integrating x402: Payments for Agents</title><link>https://go-micro.dev/blog/2026/06/15/integrating-x402-payments-for-agents.html</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/15/integrating-x402-payments-for-agents.html</guid><description>&lt;p&gt;The &lt;a href="https://go-micro.dev/blog/2026/06/15/when-the-event-is-the-prompt/"&gt;last post&lt;/a&gt; was about agents that run on their own — triggered by an event, acting without a human prompt. Follow that one step further and you reach something agents can&amp;rsquo;t do yet in most systems: pay. An autonomous agent that calls an API, rents compute, or uses another agent&amp;rsquo;s service will, sooner or later, need to settle for it — without a person reaching for a credit card. There is now a standard for exactly that, and we&amp;rsquo;re integrating it.&lt;/p&gt;</description></item><item><title>When the Event Is the Prompt</title><link>https://go-micro.dev/blog/2026/06/15/when-the-event-is-the-prompt.html</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/15/when-the-event-is-the-prompt.html</guid><description>&lt;p&gt;Almost every agent demo starts the same way: a human types a prompt, the agent responds. That framing is a habit from chat, and it hides the more useful case. The agents worth running don&amp;rsquo;t wait for you to ask. They run because something happened — a user signed up, a payment failed, a deployment finished, a metric crossed a line. In those systems there is no prompt, because there is no human in the loop. The event is the prompt.&lt;/p&gt;</description></item><item><title>Doubling Down on Agents</title><link>https://go-micro.dev/blog/2026/06/10/doubling-down-on-agents.html</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/10/doubling-down-on-agents.html</guid><description>&lt;p&gt;Go Micro made microservices easy by having an opinion. You called &lt;code&gt;micro.New&lt;/code&gt;, and it composed the pieces a service needs — service discovery, RPC, pub/sub, config, storage — behind one interface, with defaults that worked out of the box. You could test an endpoint in minutes, and when you needed to, you swapped any piece: mDNS for etcd, HTTP for gRPC, in-memory for Postgres. Opinionated, batteries-included, and pluggable. That combination is why people used it.&lt;/p&gt;</description></item><item><title>Not Everything Should Be an Agent</title><link>https://go-micro.dev/blog/2026/06/08/not-everything-should-be-an-agent.html</link><pubDate>Mon, 08 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/08/not-everything-should-be-an-agent.html</guid><description>&lt;p&gt;The last two posts were about agents — &lt;a href="https://go-micro.dev/blog/2026/06/05/introducing-micro-newagent/"&gt;the abstraction&lt;/a&gt;, and then &lt;a href="https://go-micro.dev/blog/2026/06/07/agents-that-plan-and-delegate/"&gt;agents that plan and delegate&lt;/a&gt;, directing their own work over many turns. That&amp;rsquo;s the exciting part. It&amp;rsquo;s also, honestly, the part you should reach for &lt;em&gt;least often&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;An agent decides its own path at runtime. That&amp;rsquo;s powerful when the task genuinely needs it, and a liability when it doesn&amp;rsquo;t — you trade predictability, latency, and cost for flexibility you may not want. Most real work has a known shape: &lt;em&gt;when this event happens, do these things.&lt;/em&gt; For that, you don&amp;rsquo;t want a model improvising. You want a &lt;strong&gt;workflow&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>The Evolution of Microservices</title><link>https://go-micro.dev/blog/2026/06/08/the-evolution-of-microservices.html</link><pubDate>Mon, 08 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/08/the-evolution-of-microservices.html</guid><description>&lt;p&gt;Every era of distributed systems has solved the problem the previous era created. Microservices solved the coordination cost of the monolith and created a distributed-systems problem. Containers and orchestration solved the deployment problem and created an operational one. The service mesh solved the cross-cutting problem and pushed complexity into the platform. Each step was a response to a concrete engineering constraint, not a trend.&lt;/p&gt;
&lt;p&gt;Follow that chain to the end, and the interface the industry converged on — a named, typed, discoverable, independently deployable unit — turns out to be almost exactly the interface a language model needs to call a tool. That convergence is the technical reason agents are the next era.&lt;/p&gt;</description></item><item><title>Agents That Plan and Delegate</title><link>https://go-micro.dev/blog/2026/06/07/agents-that-plan-and-delegate.html</link><pubDate>Sun, 07 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/07/agents-that-plan-and-delegate.html</guid><description>&lt;p&gt;When we &lt;a href="https://go-micro.dev/blog/2026/06/05/introducing-micro-newagent/"&gt;introduced &lt;code&gt;micro.NewAgent()&lt;/code&gt;&lt;/a&gt;, an agent was already a service with an LLM inside: scoped tools, persistent memory, and a &lt;code&gt;micro chat&lt;/code&gt; router that dispatches across agents. And in &lt;a href="https://go-micro.dev/blog/2026/06/04/agents-for-services-a-new-model-for-microservices/"&gt;Agents for Services&lt;/a&gt; we made the case that intelligence should be distributed — agents coordinate &amp;ldquo;not through code… through understanding.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;This post is the next beat. An agent that only reacts, one tool call at a time, isn&amp;rsquo;t really understanding anything — it&amp;rsquo;s improvising. Two things turn reaction into intent: the agent should &lt;strong&gt;plan&lt;/strong&gt; what it&amp;rsquo;s doing before it does it, and &lt;strong&gt;delegate&lt;/strong&gt; what it shouldn&amp;rsquo;t be doing itself. Go Micro now gives every agent both.&lt;/p&gt;</description></item><item><title>Introducing micro.NewAgent()</title><link>https://go-micro.dev/blog/2026/06/05/introducing-micro-newagent.html</link><pubDate>Fri, 05 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/05/introducing-micro-newagent.html</guid><description>&lt;p&gt;Go Micro now has three core abstractions:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;task&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// capability&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;task-mgr&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// intelligence&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;flow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewFlow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;onboard-user&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// event-driven orchestration&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Service has been the foundation since 2015. Flow added event-driven LLM orchestration. Now Agent completes the picture — an intelligent layer that manages services, with scoped tools, persistent memory, and multi-agent coordination.&lt;/p&gt;
&lt;h2 id="what-an-agent-is"&gt;What an Agent Is&lt;a class="td-heading-self-link" href="#what-an-agent-is" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A Service has endpoints and handles requests. An Agent knows &lt;em&gt;how&lt;/em&gt; to use those endpoints intelligently. The service doesn&amp;rsquo;t know about its agent. The agent knows about its services.&lt;/p&gt;</description></item><item><title>Agents for Services: A New Model for Microservices</title><link>https://go-micro.dev/blog/2026/06/04/agents-for-services-a-new-model-for-microservices.html</link><pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/04/agents-for-services-a-new-model-for-microservices.html</guid><description>&lt;p&gt;Microservices solved monolithic code. Split it into small, independent units. But we centralised the intelligence — one agent, one brain, managing everything. That&amp;rsquo;s just a different kind of monolith.&lt;/p&gt;
&lt;p&gt;What if every service had its own agent? Not embedded in the service. Created separately, assigned to manage it. The service is the capability. The agent is the intelligence.&lt;/p&gt;
&lt;h2 id="the-problem-with-one-agent"&gt;The Problem with One Agent&lt;a class="td-heading-self-link" href="#the-problem-with-one-agent" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Right now, &lt;code&gt;micro chat&lt;/code&gt; is a single agent. It discovers every service in the registry, sees every endpoint, and orchestrates across all of them. You ask it a question and it figures out which service to call.&lt;/p&gt;</description></item><item><title>Going All In on AI</title><link>https://go-micro.dev/blog/2026/06/04/going-all-in-on-ai.html</link><pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/04/going-all-in-on-ai.html</guid><description>&lt;p&gt;I started Go Micro in 2015 because building microservices in Go was too hard. Too much boilerplate, too many decisions before you could test a single endpoint. The idea was simple: sane defaults, pluggable architecture, get out of the developer&amp;rsquo;s way.&lt;/p&gt;
&lt;p&gt;Eleven years later, the framework works. Service discovery, RPC, pub/sub, config, store — all pluggable, all production-tested. 23,000 stars on GitHub. But let&amp;rsquo;s be honest: the microservices ecosystem moved on. Kubernetes won infrastructure. gRPC became the default transport. Service meshes handle the network. The problems Go Micro originally solved are mostly solved.&lt;/p&gt;</description></item><item><title>From Prompt to Production: AI-Generated Microservices That Actually Run</title><link>https://go-micro.dev/blog/2026/06/03/from-prompt-to-production-ai-generated-microservices-that-actually-run.html</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/06/03/from-prompt-to-production-ai-generated-microservices-that-actually-run.html</guid><description>&lt;p&gt;Every code generator stops at the same point: here&amp;rsquo;s some files, good luck. You get a skeleton, wire it up yourself, hope it compiles. We wanted something different.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro run --prompt &lt;span class="s2"&gt;&amp;#34;a task management system&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s not scaffolding. Two services start, register, and respond to requests. An AI agent can create tasks, organize categories, and orchestrate across services immediately. And when you need a capability that doesn&amp;rsquo;t exist — shipping, payments, notifications — the agent builds it mid-conversation.&lt;/p&gt;</description></item><item><title>Build Your Own AI Agent CLI in 150 Lines</title><link>https://go-micro.dev/blog/2026/05/30/build-your-own-ai-agent-cli-in-150-lines.html</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/05/30/build-your-own-ai-agent-cli-in-150-lines.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label=""&gt;
 &lt;a href="https://go-micro.dev/blog/2026/05/30/build-your-own-ai-agent-cli-in-150-lines/developer-experience.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#0d0e18, #b9cac5);"&gt;
 &lt;img
 alt=""
 title=""
 width="1200"
 height="800"srcset="https://go-micro.dev/blog/2026/05/30/build-your-own-ai-agent-cli-in-150-lines/developer-experience_hu_25f9e961930f9c6c.webp 420w, https://go-micro.dev/blog/2026/05/30/build-your-own-ai-agent-cli-in-150-lines/developer-experience_hu_66426f2033e7a07c.webp 789w, https://go-micro.dev/blog/2026/05/30/build-your-own-ai-agent-cli-in-150-lines/developer-experience_hu_c399469856c46d5f.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/blog/2026/05/30/build-your-own-ai-agent-cli-in-150-lines/developer-experience_hu_a59c6abb530f08fd.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;We &lt;a href="https://go-micro.dev/blog/2026/05/29/micro-chat-talk-to-your-services/"&gt;introduced &lt;code&gt;micro chat&lt;/code&gt;&lt;/a&gt; — a CLI that lets you talk to your microservices through an LLM. People asked how it works under the hood. The honest answer: it&amp;rsquo;s about 150 lines, and there&amp;rsquo;s no magic. This post walks through every piece so you can build your own — for go-micro, for your own framework, or for whatever services you have.&lt;/p&gt;</description></item><item><title>Tools as Services: Why Go Micro Was Always Ready for AI</title><link>https://go-micro.dev/blog/2026/05/30/tools-as-services-why-go-micro-was-always-ready-for-ai.html</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/05/30/tools-as-services-why-go-micro-was-always-ready-for-ai.html</guid><description>&lt;p&gt;When people see &lt;code&gt;micro chat&lt;/code&gt; or the MCP gateway, they assume we built something new. We didn&amp;rsquo;t. We exposed something that was already there.&lt;/p&gt;
&lt;p&gt;Go Micro has always treated services as self-describing, addressable units. Every service registers its name, endpoints, and request types with the registry. Every endpoint is callable through a standardised path. The only thing that changed is &lt;em&gt;who&amp;rsquo;s calling&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="the-pattern"&gt;The Pattern&lt;a class="td-heading-self-link" href="#the-pattern" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro was built on one idea: &lt;strong&gt;a service should be accessible the same way regardless of how you access it&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>From Chat to Flows: What If Your Services Could Orchestrate Themselves?</title><link>https://go-micro.dev/blog/2026/05/29/from-chat-to-flows-what-if-your-services-could-orchestrate-themselves.html</link><pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/05/29/from-chat-to-flows-what-if-your-services-could-orchestrate-themselves.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label=""&gt;
 &lt;a href="https://go-micro.dev/blog/2026/05/29/from-chat-to-flows-what-if-your-services-could-orchestrate-themselves/blog-agents-demo.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#fbfafc, #5846bb);"&gt;
 &lt;img
 alt=""
 title=""
 width="1200"
 height="800"srcset="https://go-micro.dev/blog/2026/05/29/from-chat-to-flows-what-if-your-services-could-orchestrate-themselves/blog-agents-demo_hu_515df68ec1c5d8e1.webp 420w, https://go-micro.dev/blog/2026/05/29/from-chat-to-flows-what-if-your-services-could-orchestrate-themselves/blog-agents-demo_hu_e0da701e2b7ecd98.webp 789w, https://go-micro.dev/blog/2026/05/29/from-chat-to-flows-what-if-your-services-could-orchestrate-themselves/blog-agents-demo_hu_a4233173b453a09d.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/blog/2026/05/29/from-chat-to-flows-what-if-your-services-could-orchestrate-themselves/blog-agents-demo_hu_e86f19109700af34.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;We shipped &lt;code&gt;micro chat&lt;/code&gt; recently — an interactive terminal where you talk to your services through an LLM. You say &amp;ldquo;list all users over 30 and send each a welcome email,&amp;rdquo; and the model figures out which services to call, in what order, with what arguments.&lt;/p&gt;
&lt;p&gt;It works. But it&amp;rsquo;s interactive and ephemeral. You type a prompt, get a result, move on. What if you could save that prompt as a &lt;strong&gt;flow&lt;/strong&gt; and trigger it from an event?&lt;/p&gt;</description></item><item><title>micro chat: Talk to Your Services</title><link>https://go-micro.dev/blog/2026/05/29/micro-chat-talk-to-your-services.html</link><pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/05/29/micro-chat-talk-to-your-services.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label=""&gt;
 &lt;a href="https://go-micro.dev/blog/2026/05/29/micro-chat-talk-to-your-services/developer-experience.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#0d0e18, #b9cac5);"&gt;
 &lt;img
 alt=""
 title=""
 width="1200"
 height="800"srcset="https://go-micro.dev/blog/2026/05/29/micro-chat-talk-to-your-services/developer-experience_hu_25f9e961930f9c6c.webp 420w, https://go-micro.dev/blog/2026/05/29/micro-chat-talk-to-your-services/developer-experience_hu_66426f2033e7a07c.webp 789w, https://go-micro.dev/blog/2026/05/29/micro-chat-talk-to-your-services/developer-experience_hu_c399469856c46d5f.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/blog/2026/05/29/micro-chat-talk-to-your-services/developer-experience_hu_a59c6abb530f08fd.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;We built &lt;code&gt;micro chat&lt;/code&gt; — a CLI that lets you talk to your microservices through an LLM. It discovers every service in the registry, exposes each endpoint as a tool, and lets a model decide which RPCs to call based on what you ask.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sk-ant-... micro chat --provider anthropic
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; list all users
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → called users_Users_List&lt;span class="o"&gt;({})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;There are &lt;span class="m"&gt;3&lt;/span&gt; users: Alice, Bob, and Charlie.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; send a welcome email to Alice
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → called email_Email_Send&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;to&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;alice@example.com&amp;#34;&lt;/span&gt;,&lt;span class="s2"&gt;&amp;#34;template&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;welcome&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Done, welcome email sent to Alice.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; how many orders were placed this week?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → called orders_Orders_Count&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;since&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;2026-05-22&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;There were &lt;span class="m"&gt;47&lt;/span&gt; orders placed this week.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;No glue code. No API wrappers. No tool definitions. You write normal Go services with doc comments, and &lt;code&gt;micro chat&lt;/code&gt; turns them into things an LLM can call.&lt;/p&gt;</description></item><item><title>Atlas Cloud Sponsors Go Micro: 300+ AI Models, One Integration</title><link>https://go-micro.dev/blog/2026/05/28/atlas-cloud-sponsors-go-micro-300-ai-models-one-integration.html</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/05/28/atlas-cloud-sponsors-go-micro-300-ai-models-one-integration.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label=""&gt;
 &lt;a href="https://go-micro.dev/blog/2026/05/28/atlas-cloud-sponsors-go-micro-300-ai-models-one-integration/blog-atlas.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#d5e6fd, #225dc7, #4f97f3);"&gt;
 &lt;img
 alt=""
 title=""
 width="1200"
 height="800"srcset="https://go-micro.dev/blog/2026/05/28/atlas-cloud-sponsors-go-micro-300-ai-models-one-integration/blog-atlas_hu_612726cef0d9dbf7.webp 420w, https://go-micro.dev/blog/2026/05/28/atlas-cloud-sponsors-go-micro-300-ai-models-one-integration/blog-atlas_hu_a0e3d4b8b2ee2c63.webp 789w, https://go-micro.dev/blog/2026/05/28/atlas-cloud-sponsors-go-micro-300-ai-models-one-integration/blog-atlas_hu_76df8b8dafb0cb40.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/blog/2026/05/28/atlas-cloud-sponsors-go-micro-300-ai-models-one-integration/blog-atlas_hu_e1ed09b60f6c82cc.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re excited to announce that &lt;strong&gt;&lt;a href="https://www.atlascloud.ai/"&gt;Atlas Cloud&lt;/a&gt;&lt;/strong&gt; is sponsoring Go Micro as an official AI provider partner. Atlas Cloud is now a first-class provider in the &lt;code&gt;ai&lt;/code&gt; package, giving Go Micro users access to 300+ models across text, image, and video through a single integration.&lt;/p&gt;
&lt;h2 id="the-sponsorship"&gt;The Sponsorship&lt;a class="td-heading-self-link" href="#the-sponsorship" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Atlas Cloud is an enterprise AI infrastructure platform that provides a unified API for LLM, image, and video generation. They partner with OpenRouter and ComfyUI, offer SOC 2 and HIPAA compliance, and run a custom inference engine (Atlas Photon) with FP4 quantization for fast, cost-effective inference.&lt;/p&gt;</description></item><item><title>Your Microservices Are Already an AI Platform</title><link>https://go-micro.dev/blog/2026/03/05/your-microservices-are-already-an-ai-platform.html</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/03/05/your-microservices-are-already-an-ai-platform.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label=""&gt;
 &lt;a href="https://go-micro.dev/blog/2026/03/05/your-microservices-are-already-an-ai-platform/blog-mcp.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#f9fafd, #22305d, #5160be);"&gt;
 &lt;img
 alt=""
 title=""
 width="1200"
 height="800"srcset="https://go-micro.dev/blog/2026/03/05/your-microservices-are-already-an-ai-platform/blog-mcp_hu_2142880c2718e3a6.webp 420w, https://go-micro.dev/blog/2026/03/05/your-microservices-are-already-an-ai-platform/blog-mcp_hu_ec9e7f9c4109f676.webp 789w, https://go-micro.dev/blog/2026/03/05/your-microservices-are-already-an-ai-platform/blog-mcp_hu_6f2d540900bbe0f.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/blog/2026/03/05/your-microservices-are-already-an-ai-platform/blog-mcp_hu_b73698a5ebf9f06e.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the pitch: you have microservices. They already have well-defined endpoints, typed request/response schemas, and service discovery. An AI agent needs the same things — a list of tools with input schemas and descriptions. The gap between &amp;ldquo;microservice endpoint&amp;rdquo; and &amp;ldquo;AI tool&amp;rdquo; is surprisingly small.&lt;/p&gt;
&lt;p&gt;With Go Micro + MCP, that gap is &lt;strong&gt;zero lines of code&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Agents Meet Microservices: A Hands-On Demo</title><link>https://go-micro.dev/blog/2026/03/04/agents-meet-microservices-a-hands-on-demo.html</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/03/04/agents-meet-microservices-a-hands-on-demo.html</guid><description>&lt;p&gt;We talk a lot about AI-native microservices. Time to show it. In this post we&amp;rsquo;ll build three services — projects, tasks, and team — and then hand them to an AI agent. The agent will create projects, assign tasks, and query team skills using nothing but natural language.&lt;/p&gt;
&lt;p&gt;No API wrappers. No tool definitions. Just Go comments.&lt;/p&gt;
&lt;h2 id="the-setup"&gt;The Setup&lt;a class="td-heading-self-link" href="#the-setup" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The full code is at &lt;a href="https://github.com/micro/go-micro/tree/master/examples/agent-demo"&gt;&lt;code&gt;examples/agent-demo&lt;/code&gt;&lt;/a&gt;. Here&amp;rsquo;s the architecture:&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 User[&amp;lt;b&amp;gt;User&amp;lt;/b&amp;gt; &amp;lt;br/&amp;gt;natural language] --&amp;gt; Agent[&amp;lt;b&amp;gt;AI Agent&amp;lt;/b&amp;gt; &amp;lt;br/&amp;gt;Claude, GPT, etc.]
 Agent --&amp;gt; Gateway[&amp;lt;b&amp;gt;MCP Gateway&amp;lt;/b&amp;gt; &amp;lt;i&amp;gt;:3000&amp;lt;/i&amp;gt;]

 Gateway --&amp;gt; Project[&amp;lt;b&amp;gt;ProjectService&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;Create / Get / List]
 Gateway --&amp;gt; Task[&amp;lt;b&amp;gt;TaskService&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;Create / List / Update]
 Gateway --&amp;gt; Team[&amp;lt;b&amp;gt;TeamService&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;Add / List / Get]&lt;/pre&gt;
&lt;p&gt;The MCP gateway discovers all three services automatically and exposes 9 tools. The agent sees them and knows how to call them — because we wrote good comments.&lt;/p&gt;</description></item><item><title>Building the AI-Native Future of Go Micro with Claude</title><link>https://go-micro.dev/blog/2026/03/04/building-the-ai-native-future-of-go-micro-with-claude.html</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/03/04/building-the-ai-native-future-of-go-micro-with-claude.html</guid><description>&lt;blockquote&gt;
&lt;p&gt;Go Micro was recently given access to &lt;strong&gt;Claude Max&lt;/strong&gt; through Anthropic&amp;rsquo;s open source sponsorship program. We wanted to share what we&amp;rsquo;ve built with it, why it matters, and where we&amp;rsquo;re headed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="the-sponsorship"&gt;The Sponsorship&lt;a class="td-heading-self-link" href="#the-sponsorship" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Anthropic offers Claude Max access to open source projects. Go Micro applied because our MCP integration — making every microservice an AI tool — aligns directly with Anthropic&amp;rsquo;s Model Context Protocol. They agreed, and we got to work.&lt;/p&gt;</description></item><item><title>Developer Experience Cleanup: One Way to Do Things</title><link>https://go-micro.dev/blog/2026/03/04/developer-experience-cleanup-one-way-to-do-things.html</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/03/04/developer-experience-cleanup-one-way-to-do-things.html</guid><description>&lt;p&gt;Go Micro has always prioritized getting out of your way. But over time, the API accumulated multiple ways to do the same thing — &lt;code&gt;micro.New()&lt;/code&gt;, &lt;code&gt;micro.NewService()&lt;/code&gt;, &lt;code&gt;service.New()&lt;/code&gt;, three different handler registration patterns. If you&amp;rsquo;re building something for AI agents or running a modular monolith, you shouldn&amp;rsquo;t have to choose between equivalent APIs.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve cleaned it up. Here&amp;rsquo;s what changed and why.&lt;/p&gt;
&lt;h2 id="one-way-to-create-a-service"&gt;One Way to Create a Service&lt;a class="td-heading-self-link" href="#one-way-to-create-a-service" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Before, there were three ways to create a service:&lt;/p&gt;</description></item><item><title>The Model Package: Client, Server, and Now Data</title><link>https://go-micro.dev/blog/2026/03/04/the-model-package-client-server-and-now-data.html</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/03/04/the-model-package-client-server-and-now-data.html</guid><description>&lt;p&gt;Go Micro has always given you &lt;code&gt;service.Client()&lt;/code&gt; to call other services and &lt;code&gt;service.Server()&lt;/code&gt; to handle requests. But most services also need to save and query data. Until now, that meant either using the low-level &lt;code&gt;store&lt;/code&gt; package (key-value only) or wiring up your own database layer.&lt;/p&gt;
&lt;p&gt;Today we&amp;rsquo;re shipping the &lt;code&gt;model&lt;/code&gt; package — a typed data model layer that completes the service trifecta: &lt;strong&gt;Client, Server, Model&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The Problem&lt;a class="td-heading-self-link" href="#the-problem" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The existing &lt;code&gt;store&lt;/code&gt; package is great for simple key-value storage, but real services need more. You need to filter by fields, paginate results, count records, and use different databases in dev vs production. Most teams end up writing their own data layer or pulling in an ORM that has nothing to do with Go Micro.&lt;/p&gt;</description></item><item><title>Making Microservices AI-Native with MCP</title><link>https://go-micro.dev/blog/2026/02/11/making-microservices-ai-native-with-mcp.html</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/02/11/making-microservices-ai-native-with-mcp.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label=""&gt;
 &lt;a href="https://go-micro.dev/blog/2026/02/11/making-microservices-ai-native-with-mcp/blog-mcp.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#f9fafd, #22305d, #5160be);"&gt;
 &lt;img
 alt=""
 title=""
 width="1200"
 height="800"srcset="https://go-micro.dev/blog/2026/02/11/making-microservices-ai-native-with-mcp/blog-mcp_hu_2142880c2718e3a6.webp 420w, https://go-micro.dev/blog/2026/02/11/making-microservices-ai-native-with-mcp/blog-mcp_hu_ec9e7f9c4109f676.webp 789w, https://go-micro.dev/blog/2026/02/11/making-microservices-ai-native-with-mcp/blog-mcp_hu_6f2d540900bbe0f.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/blog/2026/02/11/making-microservices-ai-native-with-mcp/blog-mcp_hu_b73698a5ebf9f06e.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re excited to announce &lt;strong&gt;MCP (Model Context Protocol) support&lt;/strong&gt; in Go Micro v5.15.0 — making your microservices instantly accessible to AI tools like Claude.&lt;/p&gt;
&lt;h2 id="the-vision"&gt;The Vision&lt;a class="td-heading-self-link" href="#the-vision" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Imagine telling Claude: &lt;em&gt;&amp;ldquo;Why is user 123&amp;rsquo;s order stuck?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Claude responds by:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Calling your &lt;code&gt;users&lt;/code&gt; service to check the account&lt;/li&gt;
&lt;li&gt;Calling your &lt;code&gt;orders&lt;/code&gt; service to inspect the order&lt;/li&gt;
&lt;li&gt;Calling your &lt;code&gt;payments&lt;/code&gt; service to verify the transaction&lt;/li&gt;
&lt;li&gt;Giving you a complete diagnosis&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;No API wrappers. No manual integrations. Your services just work with AI.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>What's New in Go Micro: v5.15.0</title><link>https://go-micro.dev/blog/2026/02/11/v5-15-0.html</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/02/11/v5-15-0.html</guid><description>&lt;h2 id="making-microservices-ai-native-with-mcp"&gt;Making Microservices AI-Native with MCP&lt;a class="td-heading-self-link" href="#making-microservices-ai-native-with-mcp" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="the-vision"&gt;The Vision&lt;a class="td-heading-self-link" href="#the-vision" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Imagine telling Claude: &lt;em&gt;&amp;ldquo;Why is user 123&amp;rsquo;s order stuck?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Claude responds by:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Calling your &lt;code&gt;users&lt;/code&gt; service to check the account&lt;/li&gt;
&lt;li&gt;Calling your &lt;code&gt;orders&lt;/code&gt; service to inspect the order&lt;/li&gt;
&lt;li&gt;Calling your &lt;code&gt;payments&lt;/code&gt; service to verify the transaction&lt;/li&gt;
&lt;li&gt;Giving you a complete diagnosis&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;No API wrappers. No manual integrations. Your services just work with AI.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="what-is-mcp"&gt;What is MCP?&lt;a class="td-heading-self-link" href="#what-is-mcp" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://modelcontextprotocol.io"&gt;Model Context Protocol&lt;/a&gt; is Anthropic&amp;rsquo;s open standard for connecting AI models to external tools. Think of it like a microservices registry, but for AI.&lt;/p&gt;</description></item><item><title>Introducing micro deploy</title><link>https://go-micro.dev/blog/2026/01/27/introducing-micro-deploy.html</link><pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/01/27/introducing-micro-deploy.html</guid><description>&lt;p&gt;&lt;figure role="figure" aria-label=""&gt;
 &lt;a href="https://go-micro.dev/blog/2026/01/27/introducing-micro-deploy/blog-deploy.jpg"&gt;
 &lt;div class="image-wrapper" style="background: linear-gradient(#f9fafb, #2e3b51, #4e79b5);"&gt;
 &lt;img
 alt=""
 title=""
 width="1200"
 height="800"srcset="https://go-micro.dev/blog/2026/01/27/introducing-micro-deploy/blog-deploy_hu_76f26a844d7a641b.webp 420w, https://go-micro.dev/blog/2026/01/27/introducing-micro-deploy/blog-deploy_hu_478ef1bd0af28e82.webp 789w, https://go-micro.dev/blog/2026/01/27/introducing-micro-deploy/blog-deploy_hu_7e6359610d0d15f3.webp 1019w, "
 sizes="(min-width: 1000px) 789px, (min-width: 500px) 80.42vw, 87.78vw"
 src="https://go-micro.dev/blog/2026/01/27/introducing-micro-deploy/blog-deploy_hu_41077b64420e609d.jpg"
 decoding="async"loading="lazy"
 /&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re excited to announce &lt;strong&gt;micro deploy&lt;/strong&gt; in Go Micro v5.13.0 — a simple way to deploy your services to any Linux server.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The Problem&lt;a class="td-heading-self-link" href="#the-problem" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro has always been great for building microservices:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro new myservice
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; myservice
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But getting those services to production? That was on you. You&amp;rsquo;d need to figure out Docker, Kubernetes, or write your own deployment scripts.&lt;/p&gt;</description></item><item><title>What's New in Go Micro: v5.13.0</title><link>https://go-micro.dev/blog/2026/01/27/v5-13-0.html</link><pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate><guid>https://go-micro.dev/blog/2026/01/27/v5-13-0.html</guid><description>&lt;h2 id="the-problem"&gt;The Problem&lt;a class="td-heading-self-link" href="#the-problem" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro has always been great for building microservices:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro new myservice
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; myservice
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But getting those services to production? That was on you. You&amp;rsquo;d need to figure out Docker, Kubernetes, or write your own deployment scripts.&lt;/p&gt;
&lt;p&gt;We tried to solve this with Micro v3 — a full platform-as-a-service. But it was too much. Too complex. Nobody wanted another platform to manage.&lt;/p&gt;
&lt;h2 id="the-solution"&gt;The Solution&lt;a class="td-heading-self-link" href="#the-solution" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The new approach is simple: &lt;strong&gt;systemd + SSH&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>`micro loop` quickstart</title><link>https://go-micro.dev/docs/guides/micro-loop.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/micro-loop.html</guid><description>&lt;p&gt;&lt;code&gt;micro loop&lt;/code&gt; scaffolds the autonomous improvement loop that Go Micro uses on
this repository: GitHub Actions workflows for planning, building, evaluation
feedback, coherence, security, and release. Use it when you want a repository to
continuously turn a ranked queue into small PRs while CI remains the merge gate.&lt;/p&gt;
&lt;h2 id="1-initialize-the-loop"&gt;1. Initialize the loop&lt;a class="td-heading-self-link" href="#1-initialize-the-loop" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Run the default loop from the repository root:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro loop init
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For every role used by Go Micro itself, scaffold all workflows:&lt;/p&gt;</description></item><item><title>0→hero reference path</title><link>https://go-micro.dev/docs/guides/zero-to-hero.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/zero-to-hero.html</guid><description>&lt;p&gt;The 0→hero path is the maintained, no-secret reference for the Go Micro
services → agents → workflows lifecycle. It ties the CLI inner loop and the
runtime harness together so a contributor can prove the framework still works as
one system, not as separate demos.&lt;/p&gt;
&lt;p&gt;Use it when you want to answer: &amp;ldquo;Can I scaffold a service, run it locally, talk
to an agent, inspect durable work, and reach the deployment boundary without
cloud credentials?&amp;rdquo;&lt;/p&gt;</description></item><item><title>About Goldydocs</title><link>https://go-micro.dev/about.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/about.html</guid><description>&lt;link rel="preload" as="image" href="https://go-micro.dev/about/featured-background_hu_d832a555129eb999.jpg" media="(max-width: 1200px)"&gt;
&lt;link rel="preload" as="image" href="https://go-micro.dev/about/featured-background_hu_bca937a8ca79e11c.jpg" media="(min-width: 1200px)"&gt;
&lt;style&gt;
#td-cover-block-0 {
 background-image: url(/about/featured-background_hu_d832a555129eb999.jpg);
}
@media only screen and (min-width: 1200px) {
 #td-cover-block-0 {
 background-image: url(/about/featured-background_hu_bca937a8ca79e11c.jpg);
 }
}
&lt;/style&gt;
&lt;section id="td-cover-block-0" class="row td-cover-block td-cover-block--height-auto td-below-navbar js-td-cover td-overlay td-overlay--dark -bg-dark" &gt;
 &lt;div class="col-12"&gt;
 &lt;div class="container td-overlay__inner"&gt;
 &lt;div class="text-center"&gt;
 &lt;h1 class="display-1 mt-0 mt-md-5 pb-4"&gt;About Goldydocs&lt;/h1&gt;
 &lt;div class="pt-3 lead"&gt;
&lt;p class="display-6"&gt;A sample site using the Docsy Hugo theme.&lt;/p&gt;
&lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/section&gt;
&lt;div&gt;&lt;a id="td-block-1" class="td-anchor-no-extra-offset"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;section class="row td-box td-box--dark td-box--height-auto"&gt;
 &lt;div class="col container"&gt;
 &lt;div class="row"&gt;
 
 
&lt;div class="col-lg-4 mb-5 mb-lg-0 text-center"&gt;
&lt;div class="mb-4 h1"&gt;
 &lt;i class="fas fa-lightbulb"&gt;&lt;/i&gt;
&lt;/div&gt;
&lt;h4 class="h3"&gt;Fastest OS &lt;strong&gt;on the planet&lt;/strong&gt;!&lt;/h4&gt;
&lt;div class="mb-0"&gt;
&lt;p&gt;The new &lt;strong&gt;TechOS&lt;/strong&gt; operating system is an open source project. It is a new project, but with grand ambitions.
Please follow this space for updates!&lt;/p&gt;</description></item><item><title>Add MCP to Existing Services</title><link>https://go-micro.dev/docs/guides/migration/add-mcp.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/migration/add-mcp.html</guid><description>&lt;h1 id="add-mcp-to-existing-services"&gt;Add MCP to Existing Services&lt;a class="td-heading-self-link" href="#add-mcp-to-existing-services" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;You have a working go-micro service and want to make it accessible to AI agents via MCP. This guide covers the three approaches, from simplest to most flexible.&lt;/p&gt;
&lt;h2 id="option-1-one-line-setup-recommended"&gt;Option 1: One-Line Setup (Recommended)&lt;a class="td-heading-self-link" href="#option-1-one-line-setup-recommended" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Add a single option to your service constructor:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/gateway/mcp&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;myservice&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithMCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:3001&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Add this line&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// ... register handlers as before&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s it. Your service now exposes all registered handlers as MCP tools at &lt;code&gt;http://localhost:3001/mcp/tools&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Adding an AI Provider to Go Micro</title><link>https://go-micro.dev/docs/guides/ai-provider-guide.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/ai-provider-guide.html</guid><description>&lt;p&gt;This guide walks you through implementing a new AI model provider for
go-micro&amp;rsquo;s &lt;code&gt;ai&lt;/code&gt; package. After following these steps your provider will
be available via &lt;code&gt;ai.New(&amp;quot;yourprovider&amp;quot;)&lt;/code&gt; and automatically usable by the
MCP gateway, the agent playground, and any service that calls
&lt;code&gt;service.Model()&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;ai&lt;/code&gt; package uses the same plugin pattern as the rest of go-micro:
define an interface, register an implementation, and let users swap
providers with a single import. All providers live under &lt;code&gt;ai/&amp;lt;name&amp;gt;/&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Agent Guardrails</title><link>https://go-micro.dev/docs/guides/agent-guardrails.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/agent-guardrails.html</guid><description>&lt;p&gt;An autonomous agent decides its own actions at runtime, which is what makes it useful — and what makes it risky. The common failure modes are mundane: it loops, repeating the same call without making progress; it runs away, taking far more steps (and cost) than the task warrants; it takes an action that should have had a human or a policy in the way.&lt;/p&gt;
&lt;p&gt;Go Micro separates &lt;strong&gt;orchestration&lt;/strong&gt; (the model deciding what to do) from &lt;strong&gt;execution safety&lt;/strong&gt; (whether a decided action is allowed to run). Every tool call an agent makes passes through one choke point, and that&amp;rsquo;s where the guardrails live — so they apply uniformly to service calls, custom tools, and &lt;code&gt;delegate&lt;/code&gt;, without touching the model or your services.&lt;/p&gt;</description></item><item><title>Agent Integration Patterns</title><link>https://go-micro.dev/docs/guides/agent-patterns.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/agent-patterns.html</guid><description>&lt;p&gt;This guide covers common patterns for integrating AI agents with Go Micro services, from single-agent workflows to multi-agent architectures.&lt;/p&gt;
&lt;h2 id="pattern-1-single-agent-with-multiple-services"&gt;Pattern 1: Single Agent with Multiple Services&lt;a class="td-heading-self-link" href="#pattern-1-single-agent-with-multiple-services" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The simplest and most common pattern. One AI agent has access to multiple microservices as MCP tools.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;User → AI Agent → MCP Gateway → [Service A, Service B, Service C]
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="setup"&gt;Setup&lt;a class="td-heading-self-link" href="#setup" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Run multiple services and expose them all through one MCP gateway:&lt;/p&gt;</description></item><item><title>Agent Loops</title><link>https://go-micro.dev/docs/guides/agent-loops.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/agent-loops.html</guid><description>&lt;p&gt;Most agent work is one-shot: a prompt goes in, an answer comes out. The next
step in agentic systems is the &lt;strong&gt;loop&lt;/strong&gt; — run a step over and over, letting the
agent keep working until the goal is met instead of stopping after one pass. One
agent improves an architecture while another removes duplicated abstractions,
both opening pull requests continuously; a draft is refined until it&amp;rsquo;s good
enough; a build is fixed and re-run until it&amp;rsquo;s green.&lt;/p&gt;</description></item><item><title>Agent2Agent (A2A)</title><link>https://go-micro.dev/docs/guides/a2a-protocol.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/a2a-protocol.html</guid><description>&lt;p&gt;Go Micro speaks the &lt;a href="https://a2a-protocol.org"&gt;Agent2Agent (A2A) protocol&lt;/a&gt; — the open standard for agents on different frameworks to discover and call each other over HTTP. The A2A gateway is the agent-side analogue of the &lt;a href="https://go-micro.dev/docs/mcp.html"&gt;MCP gateway&lt;/a&gt;: MCP exposes your services as tools, A2A exposes your agents as agents.&lt;/p&gt;
&lt;p&gt;There is nothing to add to an agent. An agent already registers in the registry with &lt;code&gt;type=agent&lt;/code&gt; metadata; the gateway discovers it, generates an &lt;strong&gt;Agent Card&lt;/strong&gt; from that metadata, and translates incoming A2A tasks to the agent&amp;rsquo;s existing &lt;code&gt;Agent.Chat&lt;/code&gt; RPC — the same call &lt;code&gt;delegate&lt;/code&gt; and flows use.&lt;/p&gt;</description></item><item><title>Agents and Workflows</title><link>https://go-micro.dev/docs/guides/agents-and-workflows.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/agents-and-workflows.html</guid><description>&lt;p&gt;Go Micro&amp;rsquo;s AI primitives map directly onto the taxonomy in Anthropic&amp;rsquo;s &lt;a href="https://www.anthropic.com/engineering/building-effective-agents"&gt;Building Effective Agents&lt;/a&gt;. That post draws one distinction that matters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Workflows&lt;/strong&gt; — &amp;ldquo;LLMs and tools orchestrated through &lt;strong&gt;predefined code paths&lt;/strong&gt;.&amp;rdquo; Deterministic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agents&lt;/strong&gt; — &amp;ldquo;LLMs &lt;strong&gt;dynamically direct their own processes&lt;/strong&gt; and tool usage.&amp;rdquo; Model-driven.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Go Micro has both, plus the harness they run inside — and expresses them as plain services and tools, with no graph DSL. That&amp;rsquo;s deliberate: the same post advises finding &amp;ldquo;the simplest solution possible&amp;rdquo; and being &amp;ldquo;cautious with frameworks… they obscure the underlying mechanics.&amp;rdquo;&lt;/p&gt;</description></item><item><title>AI Integration</title><link>https://go-micro.dev/docs/ai-integration.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/ai-integration.html</guid><description>&lt;h1 id="ai-integration"&gt;AI Integration&lt;a class="td-heading-self-link" href="#ai-integration" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Go Micro is an agent harness and service framework for Go. Every service you build can become an AI-callable tool, every agent runs as a service with model/memory/guardrails around it, and flows orchestrate the deterministic parts. This page explains how the services → agents → workflows lifecycle fits together.&lt;/p&gt;
&lt;img src="https://go-micro.dev/images/generated/mcp-agent.jpg" alt="AI integration architecture" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;h2 id="the-stack"&gt;The Stack&lt;a class="td-heading-self-link" href="#the-stack" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Services → write Go handlers, register with the framework
 ↓
Registry → automatic discovery for services, agents, and flows
 ↓
Gateways → micro api (HTTP→RPC), micro mcp (tools), micro a2a (agents)
 ↓
ai.Tools → discovers services + executes RPCs programmatically
 ↓
ai.Model → calls LLMs (Anthropic, OpenAI, Gemini, Atlas Cloud, ...)
 ↓
Agents → service-backed model loop with memory, guardrails, plan/delegate
 ↓
Flows → durable deterministic steps that can dispatch to agents
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Every layer is optional. You can use Go Micro as a service framework without AI. You can use the &lt;code&gt;ai&lt;/code&gt; package without MCP. But when you stack them, you get one runtime where services become tools, agents are reachable services, and workflows coordinate the predictable parts.&lt;/p&gt;</description></item><item><title>Analysis: Removing Reflection from go-micro</title><link>https://go-micro.dev/docs/reflection-removal-analysis.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/reflection-removal-analysis.html</guid><description>&lt;p&gt;&lt;strong&gt;Date&lt;/strong&gt;: 2026-02-03&lt;br&gt;
&lt;strong&gt;Author&lt;/strong&gt;: GitHub Copilot&lt;br&gt;
&lt;strong&gt;Status&lt;/strong&gt;: RECOMMENDATION - DO NOT PROCEED&lt;/p&gt;
&lt;h2 id="executive-summary"&gt;Executive Summary&lt;a class="td-heading-self-link" href="#executive-summary" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;After comprehensive analysis of the go-micro codebase and comparison with livekit/psrpc (referenced as an example of a reflection-free approach), &lt;strong&gt;we recommend AGAINST removing reflection from go-micro&lt;/strong&gt;. The architectural differences make this change infeasible without a complete redesign that would:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Break backward compatibility&lt;/strong&gt; - Fundamentally change the API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lose key advantages&lt;/strong&gt; - Eliminate go-micro&amp;rsquo;s &amp;ldquo;any struct as handler&amp;rdquo; flexibility&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Increase complexity&lt;/strong&gt; - Require extensive code generation and boilerplate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provide minimal benefit&lt;/strong&gt; - Performance gains would be negligible for most use cases (~10-20% in specific hot paths)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="current-reflection-usage"&gt;Current Reflection Usage&lt;a class="td-heading-self-link" href="#current-reflection-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="locations"&gt;Locations&lt;a class="td-heading-self-link" href="#locations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Reflection is used extensively in:&lt;/p&gt;</description></item><item><title>API Gateway with Backend Services</title><link>https://go-micro.dev/docs/examples/realworld/api-gateway.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/examples/realworld/api-gateway.html</guid><description>&lt;p&gt;A complete example showing an API gateway routing to multiple backend microservices.&lt;/p&gt;
&lt;h2 id="architecture"&gt;Architecture&lt;a class="td-heading-self-link" href="#architecture" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; ┌─────────────┐
 Client ───────&amp;gt;│ API Gateway │
 └──────┬──────┘
 │
 ┌──────────────┼──────────────┐
 │ │ │
 ┌─────▼────┐ ┌────▼─────┐ ┌────▼─────┐
 │ Users │ │ Orders │ │ Products │
 │ Service │ │ Service │ │ Service │
 └──────────┘ └──────────┘ └──────────┘
 │ │ │
 └──────────────┼──────────────┘
 │
 ┌──────▼──────┐
 │ PostgreSQL │
 └─────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="services"&gt;Services&lt;a class="td-heading-self-link" href="#services" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="1-users-service"&gt;1. Users Service&lt;a class="td-heading-self-link" href="#1-users-service" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// services/users/main.go&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;database/sql&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/server&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;github.com/lib/pq&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;id&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Email&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;email&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;name&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;UsersService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;sql&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GetUserRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;id&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GetUserResponse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;user&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;UsersService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;GetUserRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;GetUserResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;QueryRow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;SELECT id, email, name FROM users WHERE id = $1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sql&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;postgres&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;postgres://user:pass@localhost/users?sslmode=disable&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;panic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;defer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;users&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RegisterHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;UsersService&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;panic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-orders-service"&gt;2. Orders Service&lt;a class="td-heading-self-link" href="#2-orders-service" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// services/orders/main.go&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;database/sql&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/client&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/server&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;id&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;UserID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;user_id&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ProductID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;product_id&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;float64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;amount&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;status&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;CreatedAt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;created_at&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;OrdersService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;sql&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Client&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;CreateOrderRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;UserID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;user_id&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ProductID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;product_id&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;float64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;amount&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;CreateOrderResponse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;order&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;OrdersService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;CreateOrderRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;CreateOrderResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Verify user exists&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;userReq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;users&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;UsersService.Get&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UserID&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;userRsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;userReq&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;userRsp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Verify product exists&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;prodReq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;products&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ProductsService.Get&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ProductID&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;prodRsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Product&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;prodReq&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;prodRsp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Create order&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;QueryRow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;`
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; INSERT INTO orders (user_id, product_id, amount, status, created_at)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; VALUES ($1, $2, $3, $4, $5)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; RETURNING id, user_id, product_id, amount, status, created_at
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; `&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UserID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ProductID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;pending&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Now&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UserID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ProductID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CreatedAt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sql&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;postgres&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;postgres://user:pass@localhost/orders?sslmode=disable&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;panic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;defer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;orders&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RegisterHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;OrdersService&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;panic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3-api-gateway"&gt;3. API Gateway&lt;a class="td-heading-self-link" href="#3-api-gateway" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// gateway/main.go&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;encoding/json&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;net/http&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;strconv&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/client&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Client&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;GetUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;idStr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;strconv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ParseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;idStr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;invalid id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StatusBadRequest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;users&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;UsersService.Get&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StatusInternalServerError&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Header&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewEncoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;Encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CreateOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;UserID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;user_id&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ProductID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;product_id&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;float64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;amount&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewDecoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Body&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;Decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;invalid request&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StatusBadRequest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;orders&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;OrdersService.Create&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StatusInternalServerError&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Header&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StatusCreated&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewEncoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;Encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;api.gateway&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;gw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;Gateway&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;HandleFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/users&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;gw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GetUser&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;HandleFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/orders&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;gw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CreateOrder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ListenAndServe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:8080&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="running-the-example"&gt;Running the Example&lt;a class="td-heading-self-link" href="#running-the-example" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="development-local"&gt;Development (Local)&lt;a class="td-heading-self-link" href="#development-local" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Terminal 1: Users service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; services/users
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go run main.go
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Terminal 2: Products service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; services/products
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go run main.go
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Terminal 3: Orders service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; services/orders
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go run main.go
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Terminal 4: API Gateway&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; gateway
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go run main.go
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="testing"&gt;Testing&lt;a class="td-heading-self-link" href="#testing" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Get user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl http://localhost:8080/users?id&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create order&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X POST http://localhost:8080/orders &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s1"&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;user_id&amp;#34;: 1, &amp;#34;product_id&amp;#34;: 100, &amp;#34;amount&amp;#34;: 99.99}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="docker-compose"&gt;Docker Compose&lt;a class="td-heading-self-link" href="#docker-compose" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3.8&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postgres&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgres:15&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;secret&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;5432:5432&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./services/users&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MICRO_REGISTRY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nats&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MICRO_REGISTRY_ADDRESS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nats://nats:4222&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DATABASE_URL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgres://postgres:secret@postgres/users&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;depends_on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;postgres&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;nats&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;products&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./services/products&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MICRO_REGISTRY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nats&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MICRO_REGISTRY_ADDRESS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nats://nats:4222&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DATABASE_URL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgres://postgres:secret@postgres/products&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;depends_on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;postgres&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;nats&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./services/orders&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MICRO_REGISTRY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nats&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MICRO_REGISTRY_ADDRESS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nats://nats:4222&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DATABASE_URL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgres://postgres:secret@postgres/orders&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;depends_on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;postgres&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;nats&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gateway&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;8080:8080&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MICRO_REGISTRY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nats&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MICRO_REGISTRY_ADDRESS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nats://nats:4222&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;depends_on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;users&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;products&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;orders&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nats&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nats:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;4222:4222&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run with:&lt;/p&gt;</description></item><item><title>Architecture Decision Records</title><link>https://go-micro.dev/docs/architecture.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/architecture.html</guid><description>&lt;p&gt;Documentation of architectural decisions made in Go Micro, following the ADR pattern.&lt;/p&gt;
&lt;h2 id="what-are-adrs"&gt;What are ADRs?&lt;a class="td-heading-self-link" href="#what-are-adrs" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Architecture Decision Records (ADRs) capture important architectural decisions along with their context and consequences. They help understand why certain design choices were made.&lt;/p&gt;
&lt;h2 id="index"&gt;Index&lt;a class="td-heading-self-link" href="#index" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="available"&gt;Available&lt;a class="td-heading-self-link" href="#available" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;ADR-001: Plugin Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;ADR-004: mDNS as Default Registry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;ADR-009: Progressive Configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="planned"&gt;Planned&lt;a class="td-heading-self-link" href="#planned" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Core Design&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ADR-002: Interface-First Design&lt;/li&gt;
&lt;li&gt;ADR-003: Default Implementations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Service Discovery&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Atlas Cloud Integration</title><link>https://go-micro.dev/docs/guides/atlascloud-integration.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/atlascloud-integration.html</guid><description>&lt;h1 id="atlas-cloud-integration-guide"&gt;Atlas Cloud Integration Guide&lt;a class="td-heading-self-link" href="#atlas-cloud-integration-guide" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://www.atlascloud.ai/"&gt;Atlas Cloud&lt;/a&gt; is an enterprise AI infrastructure platform offering 300+ models across text, image, and video through a unified, OpenAI-compatible API. It is an official Go Micro sponsor and a first-class provider in the &lt;code&gt;ai&lt;/code&gt; package.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;a class="td-heading-self-link" href="#quick-start" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Install or update Go Micro:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go get go-micro.dev/v6@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Import the Atlas Cloud provider and use it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/ai&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/ai/atlascloud&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;New&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;atlascloud&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithAPIKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;your-atlas-cloud-key&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Background&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;ai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;What is Go Micro?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SystemPrompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Reply&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configuration"&gt;Configuration&lt;a class="td-heading-self-link" href="#configuration" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="options"&gt;Options&lt;a class="td-heading-self-link" href="#options" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Option&lt;/th&gt;
					&lt;th&gt;Default&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ai.WithAPIKey(key)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;em&gt;required&lt;/em&gt;&lt;/td&gt;
					&lt;td&gt;Your Atlas Cloud API key&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ai.WithModel(name)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;llama-3.3-70b&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Model to use (see &lt;a href="https://go-micro.dev/docs/guides/atlascloud-integration.html#model-selection"&gt;Model Selection&lt;/a&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ai.WithBaseURL(url)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;https://api.atlascloud.ai&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;API base URL&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="environment-variables"&gt;Environment Variables&lt;a class="td-heading-self-link" href="#environment-variables" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;micro chat&lt;/code&gt; CLI and &lt;code&gt;micro run&lt;/code&gt; / &lt;code&gt;micro server&lt;/code&gt; read configuration from environment variables:&lt;/p&gt;</description></item><item><title>Best Practices for Tool Descriptions</title><link>https://go-micro.dev/docs/guides/tool-descriptions.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/tool-descriptions.html</guid><description>&lt;p&gt;Your Go doc comments become the documentation that AI agents read when deciding how to call your service. Better descriptions lead to fewer errors, faster task completion, and a better user experience.&lt;/p&gt;
&lt;h2 id="how-agents-use-your-docs"&gt;How Agents Use Your Docs&lt;a class="td-heading-self-link" href="#how-agents-use-your-docs" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When an AI agent receives a user request like &amp;ldquo;create a task for Alice&amp;rdquo;, it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Queries the MCP tools endpoint for available tools&lt;/li&gt;
&lt;li&gt;Reads each tool&amp;rsquo;s &lt;strong&gt;description&lt;/strong&gt; to understand what it does&lt;/li&gt;
&lt;li&gt;Reads the &lt;strong&gt;parameter schema&lt;/strong&gt; and descriptions to build the input&lt;/li&gt;
&lt;li&gt;References the &lt;strong&gt;example&lt;/strong&gt; to verify the format&lt;/li&gt;
&lt;li&gt;Makes the call&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If any of these are missing or unclear, the agent guesses — and often guesses wrong.&lt;/p&gt;</description></item><item><title>Broker</title><link>https://go-micro.dev/docs/broker.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/broker.html</guid><description>&lt;img src="https://go-micro.dev/images/generated/broker.jpg" alt="Broker" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;p&gt;The broker provides pub/sub messaging for Go Micro services.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;a class="td-heading-self-link" href="#features" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Publish messages to topics&lt;/li&gt;
&lt;li&gt;Subscribe to topics&lt;/li&gt;
&lt;li&gt;Multiple broker implementations&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;a class="td-heading-self-link" href="#implementations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Supported brokers include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP (default)&lt;/li&gt;
&lt;li&gt;NATS (&lt;code&gt;go-micro.dev/v6/broker/nats&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;RabbitMQ (&lt;code&gt;go-micro.dev/v6/broker/rabbitmq&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Memory (&lt;code&gt;go-micro.dev/v6/broker/memory&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plugins are scoped under &lt;code&gt;go-micro.dev/v6/broker/&amp;lt;plugin&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Configure the broker in code or via environment variables.&lt;/p&gt;
&lt;h2 id="example-usage"&gt;Example Usage&lt;a class="td-heading-self-link" href="#example-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s how to use the broker in your Go Micro service:&lt;/p&gt;</description></item><item><title>Building AI-Native Services</title><link>https://go-micro.dev/docs/guides/ai-native-services.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/ai-native-services.html</guid><description>&lt;p&gt;This guide walks you through building a Go Micro service that is AI-native from the start — meaning AI agents can discover, understand, and call your service automatically via the Model Context Protocol (MCP).&lt;/p&gt;
&lt;h2 id="what-youll-build"&gt;What You&amp;rsquo;ll Build&lt;a class="td-heading-self-link" href="#what-youll-build" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A &lt;strong&gt;task management service&lt;/strong&gt; with full CRUD operations that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Exposes every endpoint as an MCP tool automatically&lt;/li&gt;
&lt;li&gt;Has rich documentation that agents can read&lt;/li&gt;
&lt;li&gt;Includes auth scopes for write operations&lt;/li&gt;
&lt;li&gt;Works with Claude Code, the agent playground, and any MCP client&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="td-heading-self-link" href="#prerequisites" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go install go-micro.dev/v6/cmd/micro@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="step-1-create-the-service"&gt;Step 1: Create the Service&lt;a class="td-heading-self-link" href="#step-1-create-the-service" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro new tasks
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; tasks
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="step-2-define-your-types"&gt;Step 2: Define Your Types&lt;a class="td-heading-self-link" href="#step-2-define-your-types" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Design your request/response types with &lt;code&gt;description&lt;/code&gt; tags. These tags become parameter descriptions that agents read:&lt;/p&gt;</description></item><item><title>CLI &amp; Gateway Guide</title><link>https://go-micro.dev/docs/guides/cli-gateway.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/cli-gateway.html</guid><description>&lt;p&gt;The Go Micro CLI provides two gateway modes for accessing your microservices: development (&lt;code&gt;micro run&lt;/code&gt;) and production (&lt;code&gt;micro server&lt;/code&gt;). Both use the same underlying gateway architecture, ensuring consistent behavior across environments.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; ┌─────────────────────┐
 │ HTTP Requests │
 └──────────┬──────────┘
 │
 ┌──────────▼──────────┐
 │ Unified Gateway │
 │ │
 │ • Service Discovery│
 │ • HTTP → RPC │
 │ • Web Dashboard │
 │ • Health Checks │
 └──────────┬──────────┘
 │
 ┌──────────▼──────────┐
 │ Your Services │
 │ (via Registry) │
 └─────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="quick-comparison"&gt;Quick Comparison&lt;a class="td-heading-self-link" href="#quick-comparison" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Feature&lt;/th&gt;
					&lt;th&gt;&lt;code&gt;micro run&lt;/code&gt;&lt;/th&gt;
					&lt;th&gt;&lt;code&gt;micro server&lt;/code&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Purpose&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Local development&lt;/td&gt;
					&lt;td&gt;Production API gateway&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Authentication&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (default &lt;code&gt;admin&lt;/code&gt;/&lt;code&gt;micro&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;Yes (default &lt;code&gt;admin&lt;/code&gt;/&lt;code&gt;micro&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Process Management&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (builds &amp;amp; runs services)&lt;/td&gt;
					&lt;td&gt;No (services run separately)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Hot Reload&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (watches file changes)&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Endpoint Scopes&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (&lt;code&gt;/auth/scopes&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;Yes (&lt;code&gt;/auth/scopes&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Best For&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Coding, testing, iteration&lt;/td&gt;
					&lt;td&gt;Deployed environments&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="development-mode-micro-run"&gt;Development Mode: &lt;code&gt;micro run&lt;/code&gt;&lt;a class="td-heading-self-link" href="#development-mode-micro-run" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="quick-start"&gt;Quick Start&lt;a class="td-heading-self-link" href="#quick-start" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create and run a service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro new myservice
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; myservice
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Open http://localhost:8080 - no login required!&lt;/p&gt;</description></item><item><title>Client/Server</title><link>https://go-micro.dev/docs/client-server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/client-server.html</guid><description>&lt;p&gt;Go Micro uses a client/server model for RPC communication between services.&lt;/p&gt;
&lt;h2 id="client"&gt;Client&lt;a class="td-heading-self-link" href="#client" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The client is used to make requests to other services.&lt;/p&gt;
&lt;h2 id="server"&gt;Server&lt;a class="td-heading-self-link" href="#server" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The server handles incoming requests.&lt;/p&gt;
&lt;p&gt;Both client and server are pluggable and support middleware wrappers for additional functionality.&lt;/p&gt;
&lt;h2 id="example-usage"&gt;Example Usage&lt;a class="td-heading-self-link" href="#example-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s how to define a simple handler and register it with a Go Micro server:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Greeter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Greeter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello, world!&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;greeter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RegisterHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Greeter&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Commercial Support</title><link>https://go-micro.dev/docs/support.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/support.html</guid><description>&lt;p&gt;Go Micro is free and open source. There are two ways to get help: the community, and commercial support.&lt;/p&gt;
&lt;h2 id="community-support-free"&gt;Community support (free)&lt;a class="td-heading-self-link" href="#community-support-free" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt; — &lt;a href="https://go-micro.dev/docs/index.html"&gt;/docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Examples&lt;/strong&gt; — &lt;a href="https://github.com/micro/go-micro/tree/master/examples"&gt;github.com/micro/go-micro/tree/master/examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bugs &amp;amp; features&lt;/strong&gt; — &lt;a href="https://github.com/micro/go-micro/issues"&gt;github.com/micro/go-micro/issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Questions&lt;/strong&gt; — open a &lt;a href="https://github.com/micro/go-micro/issues/new?template=question.md"&gt;Question&lt;/a&gt; issue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Community support is best-effort, from maintainers and contributors, with no response-time guarantees.&lt;/p&gt;
&lt;h2 id="commercial-support"&gt;Commercial support&lt;a class="td-heading-self-link" href="#commercial-support" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re running Go Micro in production — or building agents and services on it and want a hand — paid support and consulting are available directly from the maintainer. This is what keeps the project maintained.&lt;/p&gt;</description></item><item><title>Configuration</title><link>https://go-micro.dev/docs/config.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/config.html</guid><description>&lt;img src="https://go-micro.dev/images/generated/config.jpg" alt="Configuration" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;p&gt;Go Micro follows a progressive configuration model so you can start with zero setup and layer in complexity only when needed.&lt;/p&gt;
&lt;h2 id="levels-of-configuration"&gt;Levels of Configuration&lt;a class="td-heading-self-link" href="#levels-of-configuration" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Zero Config (Defaults)
&lt;ul&gt;
&lt;li&gt;mDNS registry, HTTP transport, in-memory broker/store&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Environment Variables
&lt;ul&gt;
&lt;li&gt;Override core components without code changes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Code Options
&lt;ul&gt;
&lt;li&gt;Fine-grained control via functional options&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;External Sources (Future / Plugins)
&lt;ul&gt;
&lt;li&gt;Configuration loaded from files, vaults, or remote services&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="core-environment-variables"&gt;Core Environment Variables&lt;a class="td-heading-self-link" href="#core-environment-variables" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Component&lt;/th&gt;
					&lt;th&gt;Variable&lt;/th&gt;
					&lt;th&gt;Example&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Registry&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_REGISTRY&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_REGISTRY=consul&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select registry implementation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Registry Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_REGISTRY_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_REGISTRY_ADDRESS=127.0.0.1:8500&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Point to registry service&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Broker&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_BROKER&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_BROKER=nats&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select broker implementation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Broker Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_BROKER_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_BROKER_ADDRESS=nats://localhost:4222&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Broker endpoint&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Transport&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_TRANSPORT&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_TRANSPORT=nats&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select transport implementation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Transport Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_TRANSPORT_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_TRANSPORT_ADDRESS=nats://localhost:4222&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Transport endpoint&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Store&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE=postgres&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select store implementation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Store Database&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_DATABASE&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_DATABASE=app&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Logical database name&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Store Table&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_TABLE&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_TABLE=records&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Default table/collection&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Store Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_STORE_ADDRESS=postgres://user:pass@localhost:5432/app?sslmode=disable&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Connection string&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Server Address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_SERVER_ADDRESS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MICRO_SERVER_ADDRESS=:8080&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Bind address for RPC server&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="example-switching-components-via-env-vars"&gt;Example: Switching Components via Env Vars&lt;a class="td-heading-self-link" href="#example-switching-components-via-env-vars" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Use NATS for broker and transport, Consul for registry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;MICRO_BROKER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nats
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;MICRO_TRANSPORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nats
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;MICRO_REGISTRY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;consul
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;MICRO_REGISTRY_ADDRESS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;127.0.0.1:8500
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Run your service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go run main.go
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;No code changes required. The framework internally wires the selected implementations.&lt;/p&gt;</description></item><item><title>Contributing</title><link>https://go-micro.dev/docs/contributing.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/contributing.html</guid><description>&lt;p&gt;This is a rendered copy of the repository &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; for convenient access via the documentation site.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro welcomes contributions of all kinds: code, documentation, examples, and plugins.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;a class="td-heading-self-link" href="#quick-start" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/micro/go-micro.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; go-micro
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go mod download
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go &lt;span class="nb"&gt;test&lt;/span&gt; ./...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="process"&gt;Process&lt;a class="td-heading-self-link" href="#process" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Fork and create a feature branch&lt;/li&gt;
&lt;li&gt;Make focused changes with tests&lt;/li&gt;
&lt;li&gt;Run linting and full test suite&lt;/li&gt;
&lt;li&gt;Open a PR describing motivation and approach&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="commit-format"&gt;Commit Format&lt;a class="td-heading-self-link" href="#commit-format" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Use conventional commits:&lt;/p&gt;</description></item><item><title>Contributing</title><link>https://go-micro.dev/docs/guides/contributing.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/contributing.html</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro welcomes contributions of all kinds: code, documentation, examples, and plugins.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;a class="td-heading-self-link" href="#quick-start" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone --depth &lt;span class="m"&gt;1&lt;/span&gt; https://github.com/micro/go-micro.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; go-micro
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go mod download
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go &lt;span class="nb"&gt;test&lt;/span&gt; ./...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="process"&gt;Process&lt;a class="td-heading-self-link" href="#process" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Fork and create a feature branch&lt;/li&gt;
&lt;li&gt;Make focused changes with tests&lt;/li&gt;
&lt;li&gt;Run linting and full test suite&lt;/li&gt;
&lt;li&gt;Open a PR describing motivation and approach&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="commit-format"&gt;Commit Format&lt;a class="td-heading-self-link" href="#commit-format" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Use conventional commits:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;feat(registry): add consul health check
fix(broker): prevent reconnect storm
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="testing"&gt;Testing&lt;a class="td-heading-self-link" href="#testing" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Run unit tests:&lt;/p&gt;</description></item><item><title>Debugging your agent</title><link>https://go-micro.dev/docs/guides/debugging-agents.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/debugging-agents.html</guid><description>&lt;h1 id="debugging-your-agent"&gt;Debugging your agent&lt;a class="td-heading-self-link" href="#debugging-your-agent" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Use this guide when an agent surprises you: it answered without using a service,
called the wrong endpoint, looped, lost memory, refused a tool, or behaved
differently when a flow handed work to it. The local inner loop is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro run &lt;span class="c1"&gt;# start services, agents, gateway, dashboard&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro chat &lt;span class="c1"&gt;# reproduce one turn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro inspect ... &lt;span class="c1"&gt;# read the recorded run or workflow history&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Debug the lifecycle in the same order Go Micro runs it: first prove the service is
registered and callable, then inspect the agent run that chose tools, then inspect
any workflow that handed off to the agent.&lt;/p&gt;</description></item><item><title>Deployment</title><link>https://go-micro.dev/docs/deployment.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/deployment.html</guid><description>&lt;h1 id="deploying-go-micro-services"&gt;Deploying Go Micro Services&lt;a class="td-heading-self-link" href="#deploying-go-micro-services" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;img src="https://go-micro.dev/images/generated/deployment.jpg" alt="Go Micro deployment" style="width: 100%; border-radius: 8px; margin-bottom: 1.5rem;" /&gt;
&lt;p&gt;This guide covers deploying go-micro services to a Linux server using systemd.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;go-micro provides a clear workflow from development to production:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Stage&lt;/th&gt;
					&lt;th&gt;Command&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Develop&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro run&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Local dev with hot reload and API gateway&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Build&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro build&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Compile production binaries for any target OS&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Deploy&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro deploy&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Push binaries to a remote Linux server via SSH + systemd&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro server&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Optional production web UI with JWT auth and user management&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Each command has a distinct role — they don&amp;rsquo;t overlap:&lt;/p&gt;</description></item><item><title>Deployment Guide</title><link>https://go-micro.dev/docs/guides/deployment.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/deployment.html</guid><description>&lt;p&gt;This is a quick reference for deploying go-micro services. For the full guide, see the &lt;a href="https://go-micro.dev/docs/deployment.html"&gt;Deployment documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="workflow"&gt;Workflow&lt;a class="td-heading-self-link" href="#workflow" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;micro run → Develop locally with hot reload
micro build → Compile production binaries
micro deploy → Push to a remote Linux server via SSH + systemd
micro server → Optional: production web dashboard with auth
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="quick-start"&gt;Quick Start&lt;a class="td-heading-self-link" href="#quick-start" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Build binaries for Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro build --os linux
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Deploy to server (builds automatically if needed)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro deploy user@your-server
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="first-time-server-setup"&gt;First-Time Server Setup&lt;a class="td-heading-self-link" href="#first-time-server-setup" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On your server (any Linux with systemd):&lt;/p&gt;</description></item><item><title>Error Handling for AI Agents</title><link>https://go-micro.dev/docs/guides/error-handling.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/error-handling.html</guid><description>&lt;h1 id="error-handling-for-ai-agents"&gt;Error Handling for AI Agents&lt;a class="td-heading-self-link" href="#error-handling-for-ai-agents" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;When AI agents call your services through MCP, they need to understand errors well enough to recover or inform the user. This guide covers how to write services that give agents useful error information.&lt;/p&gt;
&lt;h2 id="use-typed-errors"&gt;Use Typed Errors&lt;a class="td-heading-self-link" href="#use-typed-errors" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro&amp;rsquo;s &lt;code&gt;errors&lt;/code&gt; package provides structured errors that the MCP gateway forwards to agents with status codes and detail messages.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/errors&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Users&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;GetRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;GetResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;BadRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;users.Get&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;id is required&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FindUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NotFound&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;users.Get&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;user %s not found&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Agents receive structured error responses like:&lt;/p&gt;</description></item><item><title>Framework Comparison</title><link>https://go-micro.dev/docs/guides/comparison.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/comparison.html</guid><description>&lt;p&gt;How Go Micro compares to other Go microservices frameworks.&lt;/p&gt;
&lt;h2 id="quick-comparison"&gt;Quick Comparison&lt;a class="td-heading-self-link" href="#quick-comparison" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Feature&lt;/th&gt;
					&lt;th&gt;Go Micro&lt;/th&gt;
					&lt;th&gt;go-kit&lt;/th&gt;
					&lt;th&gt;gRPC&lt;/th&gt;
					&lt;th&gt;Dapr&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Learning Curve&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Low&lt;/td&gt;
					&lt;td&gt;High&lt;/td&gt;
					&lt;td&gt;Medium&lt;/td&gt;
					&lt;td&gt;Medium&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Boilerplate&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Low&lt;/td&gt;
					&lt;td&gt;High&lt;/td&gt;
					&lt;td&gt;Medium&lt;/td&gt;
					&lt;td&gt;Low&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Plugin System&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Built-in&lt;/td&gt;
					&lt;td&gt;External&lt;/td&gt;
					&lt;td&gt;Limited&lt;/td&gt;
					&lt;td&gt;Sidecar&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Service Discovery&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (mDNS, Consul, etc)&lt;/td&gt;
					&lt;td&gt;No (BYO)&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Load Balancing&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Client-side&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Sidecar&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Pub/Sub&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Transport&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;HTTP, gRPC, NATS&lt;/td&gt;
					&lt;td&gt;BYO&lt;/td&gt;
					&lt;td&gt;gRPC only&lt;/td&gt;
					&lt;td&gt;HTTP, gRPC&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Zero-config Dev&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (mDNS)&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;No (needs sidecar)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Production Ready&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Go only&lt;/td&gt;
					&lt;td&gt;Go only&lt;/td&gt;
					&lt;td&gt;Multi-language&lt;/td&gt;
					&lt;td&gt;Multi-language&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="vs-go-kit"&gt;vs go-kit&lt;a class="td-heading-self-link" href="#vs-go-kit" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="go-kit-philosophy"&gt;go-kit Philosophy&lt;a class="td-heading-self-link" href="#go-kit-philosophy" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Just a toolkit&amp;rdquo; - minimal opinions&lt;/li&gt;
&lt;li&gt;Compose your own framework&lt;/li&gt;
&lt;li&gt;Maximum flexibility&lt;/li&gt;
&lt;li&gt;Requires more decisions upfront&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="go-micro-philosophy"&gt;Go Micro Philosophy&lt;a class="td-heading-self-link" href="#go-micro-philosophy" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Batteries included&amp;rdquo; - opinionated defaults&lt;/li&gt;
&lt;li&gt;Swap components as needed&lt;/li&gt;
&lt;li&gt;Progressive complexity&lt;/li&gt;
&lt;li&gt;Get started fast, customize later&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="when-to-choose-go-kit"&gt;When to Choose go-kit&lt;a class="td-heading-self-link" href="#when-to-choose-go-kit" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;You want complete control over architecture&lt;/li&gt;
&lt;li&gt;You have strong opinions about structure&lt;/li&gt;
&lt;li&gt;You&amp;rsquo;re building a custom framework&lt;/li&gt;
&lt;li&gt;You prefer explicit over implicit&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="when-to-choose-go-micro"&gt;When to Choose Go Micro&lt;a class="td-heading-self-link" href="#when-to-choose-go-micro" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;You want to start coding immediately&lt;/li&gt;
&lt;li&gt;You prefer conventions over decisions&lt;/li&gt;
&lt;li&gt;You want built-in service discovery&lt;/li&gt;
&lt;li&gt;You need pub/sub messaging&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="code-comparison"&gt;Code Comparison&lt;a class="td-heading-self-link" href="#code-comparison" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;go-kit&lt;/strong&gt; (requires more setup):&lt;/p&gt;</description></item><item><title>Getting Started</title><link>https://go-micro.dev/docs/getting-started.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/getting-started.html</guid><description>&lt;img src="https://go-micro.dev/images/generated/getting-started.jpg" alt="Getting started with Go Micro" style="width: 100%; border-radius: 8px; margin-bottom: 1.5rem;" /&gt;
&lt;p&gt;Go Micro has three core abstractions:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Abstraction&lt;/th&gt;
					&lt;th&gt;What&lt;/th&gt;
					&lt;th&gt;Constructor&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Service&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Capability — endpoints, data, business logic&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro.NewService(&amp;quot;task&amp;quot;)&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Agent&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Intelligence — manages services with an LLM&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro.NewAgent(&amp;quot;task-mgr&amp;quot;)&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Flow&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Orchestration — event-driven LLM triggers&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;micro.NewFlow(&amp;quot;onboard&amp;quot;)&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="td-heading-self-link" href="#prerequisites" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Go 1.24+&lt;/strong&gt; for development. The &lt;code&gt;curl&lt;/code&gt; install below gives you the &lt;code&gt;micro&lt;/code&gt; binary without Go, but &lt;code&gt;micro run&lt;/code&gt; compiles your services, so you&amp;rsquo;ll want Go installed to build them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No LLM provider key is required&lt;/strong&gt; for the first run below. Add an Anthropic, OpenAI, Gemini, or other provider key only when you reach the provider-backed generation and chat steps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="install"&gt;Install&lt;a class="td-heading-self-link" href="#install" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Binary (no Go required)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://go-micro.dev/install.sh &lt;span class="p"&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Or with Go&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go install go-micro.dev/v6/cmd/micro@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If install or shell setup fails, start with &lt;a href="https://go-micro.dev/docs/guides/install-troubleshooting.html"&gt;Install troubleshooting&lt;/a&gt; to verify the binary installer or &lt;code&gt;go install&lt;/code&gt;, &lt;code&gt;PATH&lt;/code&gt;, &lt;code&gt;micro --version&lt;/code&gt;, and the no-secret smoke path.&lt;/p&gt;</description></item><item><title>Go Micro Roadmap</title><link>https://go-micro.dev/docs/roadmap-2026.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/roadmap-2026.html</guid><description>&lt;h1 id="roadmap"&gt;Roadmap&lt;a class="td-heading-self-link" href="#roadmap" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;This 2026 &amp;ldquo;AI-Native Era&amp;rdquo; roadmap has been superseded. Go Micro now has a
single, current roadmap.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;→ &lt;a href="https://go-micro.dev/docs/roadmap.html"&gt;Read the roadmap&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>go-micro.dev/v4/api</title><link>https://go-micro.dev/v4/api.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api.html</guid><description/></item><item><title>go-micro.dev/v4/api/client</title><link>https://go-micro.dev/v4/api/client.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/client.html</guid><description/></item><item><title>go-micro.dev/v4/api/handler</title><link>https://go-micro.dev/v4/api/handler.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/handler.html</guid><description/></item><item><title>go-micro.dev/v4/api/handler/api</title><link>https://go-micro.dev/v4/api/handler/api.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/handler/api.html</guid><description/></item><item><title>go-micro.dev/v4/api/handler/event</title><link>https://go-micro.dev/v4/api/handler/event.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/handler/event.html</guid><description/></item><item><title>go-micro.dev/v4/api/handler/http</title><link>https://go-micro.dev/v4/api/handler/http.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/handler/http.html</guid><description/></item><item><title>go-micro.dev/v4/api/handler/rpc</title><link>https://go-micro.dev/v4/api/handler/rpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/handler/rpc.html</guid><description/></item><item><title>go-micro.dev/v4/api/handler/web</title><link>https://go-micro.dev/v4/api/handler/web.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/handler/web.html</guid><description/></item><item><title>go-micro.dev/v4/api/internal/proto</title><link>https://go-micro.dev/v4/api/internal/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/internal/proto.html</guid><description/></item><item><title>go-micro.dev/v4/api/proto</title><link>https://go-micro.dev/v4/api/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/proto.html</guid><description/></item><item><title>go-micro.dev/v4/api/resolver</title><link>https://go-micro.dev/v4/api/resolver.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/resolver.html</guid><description/></item><item><title>go-micro.dev/v4/api/resolver/grpc</title><link>https://go-micro.dev/v4/api/resolver/grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/resolver/grpc.html</guid><description/></item><item><title>go-micro.dev/v4/api/resolver/host</title><link>https://go-micro.dev/v4/api/resolver/host.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/resolver/host.html</guid><description/></item><item><title>go-micro.dev/v4/api/resolver/path</title><link>https://go-micro.dev/v4/api/resolver/path.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/resolver/path.html</guid><description/></item><item><title>go-micro.dev/v4/api/resolver/vpath</title><link>https://go-micro.dev/v4/api/resolver/vpath.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/resolver/vpath.html</guid><description/></item><item><title>go-micro.dev/v4/api/router</title><link>https://go-micro.dev/v4/api/router.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/router.html</guid><description/></item><item><title>go-micro.dev/v4/api/router/registry</title><link>https://go-micro.dev/v4/api/router/registry.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/router/registry.html</guid><description/></item><item><title>go-micro.dev/v4/api/router/static</title><link>https://go-micro.dev/v4/api/router/static.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/router/static.html</guid><description/></item><item><title>go-micro.dev/v4/api/router/util</title><link>https://go-micro.dev/v4/api/router/util.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/router/util.html</guid><description/></item><item><title>go-micro.dev/v4/api/server</title><link>https://go-micro.dev/v4/api/server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/server.html</guid><description/></item><item><title>go-micro.dev/v4/api/server/acme</title><link>https://go-micro.dev/v4/api/server/acme.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/server/acme.html</guid><description/></item><item><title>go-micro.dev/v4/api/server/acme/autocert</title><link>https://go-micro.dev/v4/api/server/acme/autocert.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/server/acme/autocert.html</guid><description/></item><item><title>go-micro.dev/v4/api/server/cors</title><link>https://go-micro.dev/v4/api/server/cors.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/server/cors.html</guid><description/></item><item><title>go-micro.dev/v4/api/server/http</title><link>https://go-micro.dev/v4/api/server/http.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/api/server/http.html</guid><description/></item><item><title>go-micro.dev/v4/auth</title><link>https://go-micro.dev/v4/auth.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/auth.html</guid><description/></item><item><title>go-micro.dev/v4/broker</title><link>https://go-micro.dev/v4/broker.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/broker.html</guid><description/></item><item><title>go-micro.dev/v4/cache</title><link>https://go-micro.dev/v4/cache.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/cache.html</guid><description/></item><item><title>go-micro.dev/v4/client</title><link>https://go-micro.dev/v4/client.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/client.html</guid><description/></item><item><title>go-micro.dev/v4/codec</title><link>https://go-micro.dev/v4/codec.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/codec.html</guid><description/></item><item><title>go-micro.dev/v4/codec/bytes</title><link>https://go-micro.dev/v4/codec/bytes.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/codec/bytes.html</guid><description/></item><item><title>go-micro.dev/v4/codec/grpc</title><link>https://go-micro.dev/v4/codec/grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/codec/grpc.html</guid><description/></item><item><title>go-micro.dev/v4/codec/json</title><link>https://go-micro.dev/v4/codec/json.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/codec/json.html</guid><description/></item><item><title>go-micro.dev/v4/codec/jsonrpc</title><link>https://go-micro.dev/v4/codec/jsonrpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/codec/jsonrpc.html</guid><description/></item><item><title>go-micro.dev/v4/codec/proto</title><link>https://go-micro.dev/v4/codec/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/codec/proto.html</guid><description/></item><item><title>go-micro.dev/v4/codec/protorpc</title><link>https://go-micro.dev/v4/codec/protorpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/codec/protorpc.html</guid><description/></item><item><title>go-micro.dev/v4/codec/text</title><link>https://go-micro.dev/v4/codec/text.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/codec/text.html</guid><description/></item><item><title>go-micro.dev/v4/config</title><link>https://go-micro.dev/v4/config.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config.html</guid><description/></item><item><title>go-micro.dev/v4/config/encoder</title><link>https://go-micro.dev/v4/config/encoder.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/encoder.html</guid><description/></item><item><title>go-micro.dev/v4/config/encoder/json</title><link>https://go-micro.dev/v4/config/encoder/json.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/encoder/json.html</guid><description/></item><item><title>go-micro.dev/v4/config/loader</title><link>https://go-micro.dev/v4/config/loader.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/loader.html</guid><description/></item><item><title>go-micro.dev/v4/config/loader/memory</title><link>https://go-micro.dev/v4/config/loader/memory.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/loader/memory.html</guid><description/></item><item><title>go-micro.dev/v4/config/reader</title><link>https://go-micro.dev/v4/config/reader.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/reader.html</guid><description/></item><item><title>go-micro.dev/v4/config/reader/json</title><link>https://go-micro.dev/v4/config/reader/json.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/reader/json.html</guid><description/></item><item><title>go-micro.dev/v4/config/secrets</title><link>https://go-micro.dev/v4/config/secrets.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/secrets.html</guid><description/></item><item><title>go-micro.dev/v4/config/secrets/box</title><link>https://go-micro.dev/v4/config/secrets/box.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/secrets/box.html</guid><description/></item><item><title>go-micro.dev/v4/config/secrets/secretbox</title><link>https://go-micro.dev/v4/config/secrets/secretbox.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/secrets/secretbox.html</guid><description/></item><item><title>go-micro.dev/v4/config/source</title><link>https://go-micro.dev/v4/config/source.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/source.html</guid><description/></item><item><title>go-micro.dev/v4/config/source/cli</title><link>https://go-micro.dev/v4/config/source/cli.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/source/cli.html</guid><description/></item><item><title>go-micro.dev/v4/config/source/env</title><link>https://go-micro.dev/v4/config/source/env.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/source/env.html</guid><description/></item><item><title>go-micro.dev/v4/config/source/file</title><link>https://go-micro.dev/v4/config/source/file.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/source/file.html</guid><description/></item><item><title>go-micro.dev/v4/config/source/flag</title><link>https://go-micro.dev/v4/config/source/flag.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/source/flag.html</guid><description/></item><item><title>go-micro.dev/v4/config/source/memory</title><link>https://go-micro.dev/v4/config/source/memory.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/config/source/memory.html</guid><description/></item><item><title>go-micro.dev/v4/debug/handler</title><link>https://go-micro.dev/v4/debug/handler.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/debug/handler.html</guid><description/></item><item><title>go-micro.dev/v4/debug/log</title><link>https://go-micro.dev/v4/debug/log.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/debug/log.html</guid><description/></item><item><title>go-micro.dev/v4/debug/log/memory</title><link>https://go-micro.dev/v4/debug/log/memory.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/debug/log/memory.html</guid><description/></item><item><title>go-micro.dev/v4/debug/log/noop</title><link>https://go-micro.dev/v4/debug/log/noop.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/debug/log/noop.html</guid><description/></item><item><title>go-micro.dev/v4/debug/profile</title><link>https://go-micro.dev/v4/debug/profile.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/debug/profile.html</guid><description/></item><item><title>go-micro.dev/v4/debug/profile/http</title><link>https://go-micro.dev/v4/debug/profile/http.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/debug/profile/http.html</guid><description/></item><item><title>go-micro.dev/v4/debug/profile/pprof</title><link>https://go-micro.dev/v4/debug/profile/pprof.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/debug/profile/pprof.html</guid><description/></item><item><title>go-micro.dev/v4/debug/proto</title><link>https://go-micro.dev/v4/debug/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/debug/proto.html</guid><description/></item><item><title>go-micro.dev/v4/debug/stats</title><link>https://go-micro.dev/v4/debug/stats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/debug/stats.html</guid><description/></item><item><title>go-micro.dev/v4/debug/trace</title><link>https://go-micro.dev/v4/debug/trace.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/debug/trace.html</guid><description/></item><item><title>go-micro.dev/v4/errors</title><link>https://go-micro.dev/v4/errors.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/errors.html</guid><description/></item><item><title>go-micro.dev/v4/events</title><link>https://go-micro.dev/v4/events.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/events.html</guid><description/></item><item><title>go-micro.dev/v4/logger</title><link>https://go-micro.dev/v4/logger.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/logger.html</guid><description/></item><item><title>go-micro.dev/v4/metadata</title><link>https://go-micro.dev/v4/metadata.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/metadata.html</guid><description/></item><item><title>go-micro.dev/v4/registry</title><link>https://go-micro.dev/v4/registry.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/registry.html</guid><description/></item><item><title>go-micro.dev/v4/registry/cache</title><link>https://go-micro.dev/v4/registry/cache.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/registry/cache.html</guid><description/></item><item><title>go-micro.dev/v4/runtime</title><link>https://go-micro.dev/v4/runtime.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/runtime.html</guid><description/></item><item><title>go-micro.dev/v4/runtime/kubernetes</title><link>https://go-micro.dev/v4/runtime/kubernetes.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/runtime/kubernetes.html</guid><description/></item><item><title>go-micro.dev/v4/runtime/local</title><link>https://go-micro.dev/v4/runtime/local.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/runtime/local.html</guid><description/></item><item><title>go-micro.dev/v4/runtime/local/build</title><link>https://go-micro.dev/v4/runtime/local/build.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/runtime/local/build.html</guid><description/></item><item><title>go-micro.dev/v4/runtime/local/build/docker</title><link>https://go-micro.dev/v4/runtime/local/build/docker.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/runtime/local/build/docker.html</guid><description/></item><item><title>go-micro.dev/v4/runtime/local/build/go</title><link>https://go-micro.dev/v4/runtime/local/build/go.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/runtime/local/build/go.html</guid><description/></item><item><title>go-micro.dev/v4/runtime/local/git</title><link>https://go-micro.dev/v4/runtime/local/git.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/runtime/local/git.html</guid><description/></item><item><title>go-micro.dev/v4/runtime/local/process</title><link>https://go-micro.dev/v4/runtime/local/process.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/runtime/local/process.html</guid><description/></item><item><title>go-micro.dev/v4/runtime/local/process/os</title><link>https://go-micro.dev/v4/runtime/local/process/os.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/runtime/local/process/os.html</guid><description/></item><item><title>go-micro.dev/v4/runtime/local/source</title><link>https://go-micro.dev/v4/runtime/local/source.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/runtime/local/source.html</guid><description/></item><item><title>go-micro.dev/v4/runtime/local/source/git</title><link>https://go-micro.dev/v4/runtime/local/source/git.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/runtime/local/source/git.html</guid><description/></item><item><title>go-micro.dev/v4/runtime/local/source/go</title><link>https://go-micro.dev/v4/runtime/local/source/go.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/runtime/local/source/go.html</guid><description/></item><item><title>go-micro.dev/v4/selector</title><link>https://go-micro.dev/v4/selector.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/selector.html</guid><description/></item><item><title>go-micro.dev/v4/server</title><link>https://go-micro.dev/v4/server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/server.html</guid><description/></item><item><title>go-micro.dev/v4/server/mock</title><link>https://go-micro.dev/v4/server/mock.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/server/mock.html</guid><description/></item><item><title>go-micro.dev/v4/server/proto</title><link>https://go-micro.dev/v4/server/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/server/proto.html</guid><description/></item><item><title>go-micro.dev/v4/store</title><link>https://go-micro.dev/v4/store.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/store.html</guid><description/></item><item><title>go-micro.dev/v4/sync</title><link>https://go-micro.dev/v4/sync.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/sync.html</guid><description/></item><item><title>go-micro.dev/v4/test</title><link>https://go-micro.dev/v4/test.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/test.html</guid><description/></item><item><title>go-micro.dev/v4/transport</title><link>https://go-micro.dev/v4/transport.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/transport.html</guid><description/></item><item><title>go-micro.dev/v4/transport/headers</title><link>https://go-micro.dev/v4/transport/headers.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/transport/headers.html</guid><description/></item><item><title>go-micro.dev/v4/util/addr</title><link>https://go-micro.dev/v4/util/addr.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/addr.html</guid><description/></item><item><title>go-micro.dev/v4/util/backoff</title><link>https://go-micro.dev/v4/util/backoff.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/backoff.html</guid><description/></item><item><title>go-micro.dev/v4/util/buf</title><link>https://go-micro.dev/v4/util/buf.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/buf.html</guid><description/></item><item><title>go-micro.dev/v4/util/cmd</title><link>https://go-micro.dev/v4/util/cmd.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/cmd.html</guid><description/></item><item><title>go-micro.dev/v4/util/ctx</title><link>https://go-micro.dev/v4/util/ctx.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/ctx.html</guid><description/></item><item><title>go-micro.dev/v4/util/file</title><link>https://go-micro.dev/v4/util/file.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/file.html</guid><description/></item><item><title>go-micro.dev/v4/util/file/proto</title><link>https://go-micro.dev/v4/util/file/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/file/proto.html</guid><description/></item><item><title>go-micro.dev/v4/util/grpc</title><link>https://go-micro.dev/v4/util/grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/grpc.html</guid><description/></item><item><title>go-micro.dev/v4/util/http</title><link>https://go-micro.dev/v4/util/http.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/http.html</guid><description/></item><item><title>go-micro.dev/v4/util/io</title><link>https://go-micro.dev/v4/util/io.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/io.html</guid><description/></item><item><title>go-micro.dev/v4/util/jitter</title><link>https://go-micro.dev/v4/util/jitter.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/jitter.html</guid><description/></item><item><title>go-micro.dev/v4/util/kubernetes/api</title><link>https://go-micro.dev/v4/util/kubernetes/api.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/kubernetes/api.html</guid><description/></item><item><title>go-micro.dev/v4/util/kubernetes/client</title><link>https://go-micro.dev/v4/util/kubernetes/client.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/kubernetes/client.html</guid><description/></item><item><title>go-micro.dev/v4/util/mdns</title><link>https://go-micro.dev/v4/util/mdns.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/mdns.html</guid><description/></item><item><title>go-micro.dev/v4/util/net</title><link>https://go-micro.dev/v4/util/net.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/net.html</guid><description/></item><item><title>go-micro.dev/v4/util/pki</title><link>https://go-micro.dev/v4/util/pki.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/pki.html</guid><description/></item><item><title>go-micro.dev/v4/util/pool</title><link>https://go-micro.dev/v4/util/pool.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/pool.html</guid><description/></item><item><title>go-micro.dev/v4/util/qson</title><link>https://go-micro.dev/v4/util/qson.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/qson.html</guid><description/></item><item><title>go-micro.dev/v4/util/registry</title><link>https://go-micro.dev/v4/util/registry.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/registry.html</guid><description/></item><item><title>go-micro.dev/v4/util/ring</title><link>https://go-micro.dev/v4/util/ring.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/ring.html</guid><description/></item><item><title>go-micro.dev/v4/util/signal</title><link>https://go-micro.dev/v4/util/signal.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/signal.html</guid><description/></item><item><title>go-micro.dev/v4/util/socket</title><link>https://go-micro.dev/v4/util/socket.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/socket.html</guid><description/></item><item><title>go-micro.dev/v4/util/stream</title><link>https://go-micro.dev/v4/util/stream.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/stream.html</guid><description/></item><item><title>go-micro.dev/v4/util/sync</title><link>https://go-micro.dev/v4/util/sync.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/sync.html</guid><description/></item><item><title>go-micro.dev/v4/util/test</title><link>https://go-micro.dev/v4/util/test.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/test.html</guid><description/></item><item><title>go-micro.dev/v4/util/tls</title><link>https://go-micro.dev/v4/util/tls.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/tls.html</guid><description/></item><item><title>go-micro.dev/v4/util/wrapper</title><link>https://go-micro.dev/v4/util/wrapper.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/util/wrapper.html</guid><description/></item><item><title>go-micro.dev/v4/web</title><link>https://go-micro.dev/v4/web.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v4/web.html</guid><description/></item><item><title>go-micro.dev/v5/agent</title><link>https://go-micro.dev/v5/agent.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/agent.html</guid><description/></item><item><title>go-micro.dev/v5/agent/proto</title><link>https://go-micro.dev/v5/agent/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/agent/proto.html</guid><description/></item><item><title>go-micro.dev/v5/ai</title><link>https://go-micro.dev/v5/ai.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/ai.html</guid><description/></item><item><title>go-micro.dev/v5/ai/anthropic</title><link>https://go-micro.dev/v5/ai/anthropic.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/ai/anthropic.html</guid><description/></item><item><title>go-micro.dev/v5/ai/atlascloud</title><link>https://go-micro.dev/v5/ai/atlascloud.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/ai/atlascloud.html</guid><description/></item><item><title>go-micro.dev/v5/ai/flow</title><link>https://go-micro.dev/v5/ai/flow.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/ai/flow.html</guid><description/></item><item><title>go-micro.dev/v5/ai/gemini</title><link>https://go-micro.dev/v5/ai/gemini.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/ai/gemini.html</guid><description/></item><item><title>go-micro.dev/v5/ai/groq</title><link>https://go-micro.dev/v5/ai/groq.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/ai/groq.html</guid><description/></item><item><title>go-micro.dev/v5/ai/mistral</title><link>https://go-micro.dev/v5/ai/mistral.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/ai/mistral.html</guid><description/></item><item><title>go-micro.dev/v5/ai/openai</title><link>https://go-micro.dev/v5/ai/openai.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/ai/openai.html</guid><description/></item><item><title>go-micro.dev/v5/ai/together</title><link>https://go-micro.dev/v5/ai/together.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/ai/together.html</guid><description/></item><item><title>go-micro.dev/v5/auth</title><link>https://go-micro.dev/v5/auth.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/auth.html</guid><description/></item><item><title>go-micro.dev/v5/auth/jwt</title><link>https://go-micro.dev/v5/auth/jwt.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/auth/jwt.html</guid><description/></item><item><title>go-micro.dev/v5/auth/jwt/token</title><link>https://go-micro.dev/v5/auth/jwt/token.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/auth/jwt/token.html</guid><description/></item><item><title>go-micro.dev/v5/auth/noop</title><link>https://go-micro.dev/v5/auth/noop.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/auth/noop.html</guid><description/></item><item><title>go-micro.dev/v5/broker</title><link>https://go-micro.dev/v5/broker.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/broker.html</guid><description/></item><item><title>go-micro.dev/v5/broker/nats</title><link>https://go-micro.dev/v5/broker/nats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/broker/nats.html</guid><description/></item><item><title>go-micro.dev/v5/broker/rabbitmq</title><link>https://go-micro.dev/v5/broker/rabbitmq.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/broker/rabbitmq.html</guid><description/></item><item><title>go-micro.dev/v5/cache</title><link>https://go-micro.dev/v5/cache.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cache.html</guid><description/></item><item><title>go-micro.dev/v5/cache/redis</title><link>https://go-micro.dev/v5/cache/redis.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cache/redis.html</guid><description/></item><item><title>go-micro.dev/v5/client</title><link>https://go-micro.dev/v5/client.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/client.html</guid><description/></item><item><title>go-micro.dev/v5/client/grpc</title><link>https://go-micro.dev/v5/client/grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/client/grpc.html</guid><description/></item><item><title>go-micro.dev/v5/cmd</title><link>https://go-micro.dev/v5/cmd.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro</title><link>https://go-micro.dev/v5/cmd/micro.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro-mcp-gateway</title><link>https://go-micro.dev/v5/cmd/micro-mcp-gateway.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro-mcp-gateway.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/a2a</title><link>https://go-micro.dev/v5/cmd/micro/a2a.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/a2a.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/api</title><link>https://go-micro.dev/v5/cmd/micro/api.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/api.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/chat</title><link>https://go-micro.dev/v5/cmd/micro/chat.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/chat.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/cli</title><link>https://go-micro.dev/v5/cmd/micro/cli.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/cli.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/cli/agent</title><link>https://go-micro.dev/v5/cmd/micro/cli/agent.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/cli/agent.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/cli/build</title><link>https://go-micro.dev/v5/cmd/micro/cli/build.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/cli/build.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/cli/deploy</title><link>https://go-micro.dev/v5/cmd/micro/cli/deploy.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/cli/deploy.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/cli/gen</title><link>https://go-micro.dev/v5/cmd/micro/cli/gen.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/cli/gen.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/cli/generate</title><link>https://go-micro.dev/v5/cmd/micro/cli/generate.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/cli/generate.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/cli/init</title><link>https://go-micro.dev/v5/cmd/micro/cli/init.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/cli/init.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/cli/new</title><link>https://go-micro.dev/v5/cmd/micro/cli/new.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/cli/new.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/cli/new/template</title><link>https://go-micro.dev/v5/cmd/micro/cli/new/template.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/cli/new/template.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/cli/remote</title><link>https://go-micro.dev/v5/cmd/micro/cli/remote.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/cli/remote.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/cli/util</title><link>https://go-micro.dev/v5/cmd/micro/cli/util.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/cli/util.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/flow</title><link>https://go-micro.dev/v5/cmd/micro/flow.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/flow.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/mcp</title><link>https://go-micro.dev/v5/cmd/micro/mcp.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/mcp.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/resource</title><link>https://go-micro.dev/v5/cmd/micro/resource.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/resource.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/run</title><link>https://go-micro.dev/v5/cmd/micro/run.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/run.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/run/config</title><link>https://go-micro.dev/v5/cmd/micro/run/config.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/run/config.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/run/watcher</title><link>https://go-micro.dev/v5/cmd/micro/run/watcher.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/run/watcher.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/micro/server</title><link>https://go-micro.dev/v5/cmd/micro/server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/micro/server.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/protoc-gen-micro</title><link>https://go-micro.dev/v5/cmd/protoc-gen-micro.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/protoc-gen-micro.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/protoc-gen-micro/examples/greeter</title><link>https://go-micro.dev/v5/cmd/protoc-gen-micro/examples/greeter.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/protoc-gen-micro/examples/greeter.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/protoc-gen-micro/generator</title><link>https://go-micro.dev/v5/cmd/protoc-gen-micro/generator.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/protoc-gen-micro/generator.html</guid><description/></item><item><title>go-micro.dev/v5/cmd/protoc-gen-micro/plugin/micro</title><link>https://go-micro.dev/v5/cmd/protoc-gen-micro/plugin/micro.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/cmd/protoc-gen-micro/plugin/micro.html</guid><description/></item><item><title>go-micro.dev/v5/codec</title><link>https://go-micro.dev/v5/codec.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/codec.html</guid><description/></item><item><title>go-micro.dev/v5/codec/bytes</title><link>https://go-micro.dev/v5/codec/bytes.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/codec/bytes.html</guid><description/></item><item><title>go-micro.dev/v5/codec/grpc</title><link>https://go-micro.dev/v5/codec/grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/codec/grpc.html</guid><description/></item><item><title>go-micro.dev/v5/codec/json</title><link>https://go-micro.dev/v5/codec/json.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/codec/json.html</guid><description/></item><item><title>go-micro.dev/v5/codec/jsonrpc</title><link>https://go-micro.dev/v5/codec/jsonrpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/codec/jsonrpc.html</guid><description/></item><item><title>go-micro.dev/v5/codec/proto</title><link>https://go-micro.dev/v5/codec/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/codec/proto.html</guid><description/></item><item><title>go-micro.dev/v5/codec/protorpc</title><link>https://go-micro.dev/v5/codec/protorpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/codec/protorpc.html</guid><description/></item><item><title>go-micro.dev/v5/codec/text</title><link>https://go-micro.dev/v5/codec/text.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/codec/text.html</guid><description/></item><item><title>go-micro.dev/v5/config</title><link>https://go-micro.dev/v5/config.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config.html</guid><description/></item><item><title>go-micro.dev/v5/config/encoder</title><link>https://go-micro.dev/v5/config/encoder.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/encoder.html</guid><description/></item><item><title>go-micro.dev/v5/config/encoder/json</title><link>https://go-micro.dev/v5/config/encoder/json.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/encoder/json.html</guid><description/></item><item><title>go-micro.dev/v5/config/loader</title><link>https://go-micro.dev/v5/config/loader.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/loader.html</guid><description/></item><item><title>go-micro.dev/v5/config/loader/memory</title><link>https://go-micro.dev/v5/config/loader/memory.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/loader/memory.html</guid><description/></item><item><title>go-micro.dev/v5/config/reader</title><link>https://go-micro.dev/v5/config/reader.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/reader.html</guid><description/></item><item><title>go-micro.dev/v5/config/reader/json</title><link>https://go-micro.dev/v5/config/reader/json.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/reader/json.html</guid><description/></item><item><title>go-micro.dev/v5/config/secrets</title><link>https://go-micro.dev/v5/config/secrets.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/secrets.html</guid><description/></item><item><title>go-micro.dev/v5/config/secrets/box</title><link>https://go-micro.dev/v5/config/secrets/box.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/secrets/box.html</guid><description/></item><item><title>go-micro.dev/v5/config/secrets/secretbox</title><link>https://go-micro.dev/v5/config/secrets/secretbox.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/secrets/secretbox.html</guid><description/></item><item><title>go-micro.dev/v5/config/source</title><link>https://go-micro.dev/v5/config/source.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/source.html</guid><description/></item><item><title>go-micro.dev/v5/config/source/cli</title><link>https://go-micro.dev/v5/config/source/cli.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/source/cli.html</guid><description/></item><item><title>go-micro.dev/v5/config/source/env</title><link>https://go-micro.dev/v5/config/source/env.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/source/env.html</guid><description/></item><item><title>go-micro.dev/v5/config/source/file</title><link>https://go-micro.dev/v5/config/source/file.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/source/file.html</guid><description/></item><item><title>go-micro.dev/v5/config/source/flag</title><link>https://go-micro.dev/v5/config/source/flag.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/source/flag.html</guid><description/></item><item><title>go-micro.dev/v5/config/source/memory</title><link>https://go-micro.dev/v5/config/source/memory.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/source/memory.html</guid><description/></item><item><title>go-micro.dev/v5/config/source/nats</title><link>https://go-micro.dev/v5/config/source/nats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/config/source/nats.html</guid><description/></item><item><title>go-micro.dev/v5/debug/handler</title><link>https://go-micro.dev/v5/debug/handler.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/debug/handler.html</guid><description/></item><item><title>go-micro.dev/v5/debug/log</title><link>https://go-micro.dev/v5/debug/log.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/debug/log.html</guid><description/></item><item><title>go-micro.dev/v5/debug/log/memory</title><link>https://go-micro.dev/v5/debug/log/memory.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/debug/log/memory.html</guid><description/></item><item><title>go-micro.dev/v5/debug/log/noop</title><link>https://go-micro.dev/v5/debug/log/noop.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/debug/log/noop.html</guid><description/></item><item><title>go-micro.dev/v5/debug/profile</title><link>https://go-micro.dev/v5/debug/profile.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/debug/profile.html</guid><description/></item><item><title>go-micro.dev/v5/debug/profile/http</title><link>https://go-micro.dev/v5/debug/profile/http.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/debug/profile/http.html</guid><description/></item><item><title>go-micro.dev/v5/debug/profile/pprof</title><link>https://go-micro.dev/v5/debug/profile/pprof.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/debug/profile/pprof.html</guid><description/></item><item><title>go-micro.dev/v5/debug/proto</title><link>https://go-micro.dev/v5/debug/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/debug/proto.html</guid><description/></item><item><title>go-micro.dev/v5/debug/stats</title><link>https://go-micro.dev/v5/debug/stats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/debug/stats.html</guid><description/></item><item><title>go-micro.dev/v5/debug/trace</title><link>https://go-micro.dev/v5/debug/trace.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/debug/trace.html</guid><description/></item><item><title>go-micro.dev/v5/errors</title><link>https://go-micro.dev/v5/errors.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/errors.html</guid><description/></item><item><title>go-micro.dev/v5/events</title><link>https://go-micro.dev/v5/events.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/events.html</guid><description/></item><item><title>go-micro.dev/v5/events/natsjs</title><link>https://go-micro.dev/v5/events/natsjs.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/events/natsjs.html</guid><description/></item><item><title>go-micro.dev/v5/examples/agent-demo</title><link>https://go-micro.dev/v5/examples/agent-demo.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/agent-demo.html</guid><description/></item><item><title>go-micro.dev/v5/examples/agent-plan-delegate</title><link>https://go-micro.dev/v5/examples/agent-plan-delegate.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/agent-plan-delegate.html</guid><description/></item><item><title>go-micro.dev/v5/examples/agent-wrap-tool</title><link>https://go-micro.dev/v5/examples/agent-wrap-tool.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/agent-wrap-tool.html</guid><description/></item><item><title>go-micro.dev/v5/examples/auth/client</title><link>https://go-micro.dev/v5/examples/auth/client.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/auth/client.html</guid><description/></item><item><title>go-micro.dev/v5/examples/auth/proto</title><link>https://go-micro.dev/v5/examples/auth/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/auth/proto.html</guid><description/></item><item><title>go-micro.dev/v5/examples/auth/server</title><link>https://go-micro.dev/v5/examples/auth/server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/auth/server.html</guid><description/></item><item><title>go-micro.dev/v5/examples/flow-durable</title><link>https://go-micro.dev/v5/examples/flow-durable.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/flow-durable.html</guid><description/></item><item><title>go-micro.dev/v5/examples/graceful-stop</title><link>https://go-micro.dev/v5/examples/graceful-stop.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/graceful-stop.html</guid><description/></item><item><title>go-micro.dev/v5/examples/grpc-interop/client</title><link>https://go-micro.dev/v5/examples/grpc-interop/client.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/grpc-interop/client.html</guid><description/></item><item><title>go-micro.dev/v5/examples/grpc-interop/proto</title><link>https://go-micro.dev/v5/examples/grpc-interop/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/grpc-interop/proto.html</guid><description/></item><item><title>go-micro.dev/v5/examples/grpc-interop/server</title><link>https://go-micro.dev/v5/examples/grpc-interop/server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/grpc-interop/server.html</guid><description/></item><item><title>go-micro.dev/v5/examples/hello-world</title><link>https://go-micro.dev/v5/examples/hello-world.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/hello-world.html</guid><description/></item><item><title>go-micro.dev/v5/examples/mcp/crud</title><link>https://go-micro.dev/v5/examples/mcp/crud.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/mcp/crud.html</guid><description/></item><item><title>go-micro.dev/v5/examples/mcp/documented</title><link>https://go-micro.dev/v5/examples/mcp/documented.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/mcp/documented.html</guid><description/></item><item><title>go-micro.dev/v5/examples/mcp/hello</title><link>https://go-micro.dev/v5/examples/mcp/hello.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/mcp/hello.html</guid><description/></item><item><title>go-micro.dev/v5/examples/mcp/platform</title><link>https://go-micro.dev/v5/examples/mcp/platform.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/mcp/platform.html</guid><description/></item><item><title>go-micro.dev/v5/examples/mcp/workflow</title><link>https://go-micro.dev/v5/examples/mcp/workflow.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/mcp/workflow.html</guid><description/></item><item><title>go-micro.dev/v5/examples/multi-service</title><link>https://go-micro.dev/v5/examples/multi-service.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/multi-service.html</guid><description/></item><item><title>go-micro.dev/v5/examples/web-service</title><link>https://go-micro.dev/v5/examples/web-service.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/examples/web-service.html</guid><description/></item><item><title>go-micro.dev/v5/flow</title><link>https://go-micro.dev/v5/flow.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/flow.html</guid><description/></item><item><title>go-micro.dev/v5/gateway/a2a</title><link>https://go-micro.dev/v5/gateway/a2a.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/gateway/a2a.html</guid><description/></item><item><title>go-micro.dev/v5/gateway/api</title><link>https://go-micro.dev/v5/gateway/api.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/gateway/api.html</guid><description/></item><item><title>go-micro.dev/v5/gateway/mcp</title><link>https://go-micro.dev/v5/gateway/mcp.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/gateway/mcp.html</guid><description/></item><item><title>go-micro.dev/v5/health</title><link>https://go-micro.dev/v5/health.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/health.html</guid><description/></item><item><title>go-micro.dev/v5/internal/harness/agent-flow</title><link>https://go-micro.dev/v5/internal/harness/agent-flow.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/harness/agent-flow.html</guid><description/></item><item><title>go-micro.dev/v5/internal/harness/plan-delegate</title><link>https://go-micro.dev/v5/internal/harness/plan-delegate.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/harness/plan-delegate.html</guid><description/></item><item><title>go-micro.dev/v5/internal/harness/universe</title><link>https://go-micro.dev/v5/internal/harness/universe.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/harness/universe.html</guid><description/></item><item><title>go-micro.dev/v5/internal/test</title><link>https://go-micro.dev/v5/internal/test.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/test.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/addr</title><link>https://go-micro.dev/v5/internal/util/addr.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/addr.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/backoff</title><link>https://go-micro.dev/v5/internal/util/backoff.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/backoff.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/buf</title><link>https://go-micro.dev/v5/internal/util/buf.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/buf.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/grpc</title><link>https://go-micro.dev/v5/internal/util/grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/grpc.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/http</title><link>https://go-micro.dev/v5/internal/util/http.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/http.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/jitter</title><link>https://go-micro.dev/v5/internal/util/jitter.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/jitter.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/mdns</title><link>https://go-micro.dev/v5/internal/util/mdns.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/mdns.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/net</title><link>https://go-micro.dev/v5/internal/util/net.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/net.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/pool</title><link>https://go-micro.dev/v5/internal/util/pool.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/pool.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/registry</title><link>https://go-micro.dev/v5/internal/util/registry.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/registry.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/ring</title><link>https://go-micro.dev/v5/internal/util/ring.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/ring.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/signal</title><link>https://go-micro.dev/v5/internal/util/signal.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/signal.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/socket</title><link>https://go-micro.dev/v5/internal/util/socket.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/socket.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/test</title><link>https://go-micro.dev/v5/internal/util/test.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/test.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/tls</title><link>https://go-micro.dev/v5/internal/util/tls.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/tls.html</guid><description/></item><item><title>go-micro.dev/v5/internal/util/wrapper</title><link>https://go-micro.dev/v5/internal/util/wrapper.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/internal/util/wrapper.html</guid><description/></item><item><title>go-micro.dev/v5/logger</title><link>https://go-micro.dev/v5/logger.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/logger.html</guid><description/></item><item><title>go-micro.dev/v5/metadata</title><link>https://go-micro.dev/v5/metadata.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/metadata.html</guid><description/></item><item><title>go-micro.dev/v5/model</title><link>https://go-micro.dev/v5/model.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/model.html</guid><description/></item><item><title>go-micro.dev/v5/model/memory</title><link>https://go-micro.dev/v5/model/memory.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/model/memory.html</guid><description/></item><item><title>go-micro.dev/v5/model/postgres</title><link>https://go-micro.dev/v5/model/postgres.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/model/postgres.html</guid><description/></item><item><title>go-micro.dev/v5/model/sqlite</title><link>https://go-micro.dev/v5/model/sqlite.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/model/sqlite.html</guid><description/></item><item><title>go-micro.dev/v5/registry</title><link>https://go-micro.dev/v5/registry.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/registry.html</guid><description/></item><item><title>go-micro.dev/v5/registry/cache</title><link>https://go-micro.dev/v5/registry/cache.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/registry/cache.html</guid><description/></item><item><title>go-micro.dev/v5/registry/consul</title><link>https://go-micro.dev/v5/registry/consul.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/registry/consul.html</guid><description/></item><item><title>go-micro.dev/v5/registry/etcd</title><link>https://go-micro.dev/v5/registry/etcd.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/registry/etcd.html</guid><description/></item><item><title>go-micro.dev/v5/registry/nats</title><link>https://go-micro.dev/v5/registry/nats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/registry/nats.html</guid><description/></item><item><title>go-micro.dev/v5/selector</title><link>https://go-micro.dev/v5/selector.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/selector.html</guid><description/></item><item><title>go-micro.dev/v5/server</title><link>https://go-micro.dev/v5/server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/server.html</guid><description/></item><item><title>go-micro.dev/v5/server/grpc</title><link>https://go-micro.dev/v5/server/grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/server/grpc.html</guid><description/></item><item><title>go-micro.dev/v5/server/mock</title><link>https://go-micro.dev/v5/server/mock.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/server/mock.html</guid><description/></item><item><title>go-micro.dev/v5/server/proto</title><link>https://go-micro.dev/v5/server/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/server/proto.html</guid><description/></item><item><title>go-micro.dev/v5/service</title><link>https://go-micro.dev/v5/service.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/service.html</guid><description/></item><item><title>go-micro.dev/v5/service/profile</title><link>https://go-micro.dev/v5/service/profile.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/service/profile.html</guid><description/></item><item><title>go-micro.dev/v5/store</title><link>https://go-micro.dev/v5/store.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/store.html</guid><description/></item><item><title>go-micro.dev/v5/store/mysql</title><link>https://go-micro.dev/v5/store/mysql.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/store/mysql.html</guid><description/></item><item><title>go-micro.dev/v5/store/nats-js-kv</title><link>https://go-micro.dev/v5/store/nats-js-kv.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/store/nats-js-kv.html</guid><description/></item><item><title>go-micro.dev/v5/store/postgres</title><link>https://go-micro.dev/v5/store/postgres.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/store/postgres.html</guid><description/></item><item><title>go-micro.dev/v5/store/postgres/pgx</title><link>https://go-micro.dev/v5/store/postgres/pgx.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/store/postgres/pgx.html</guid><description/></item><item><title>go-micro.dev/v5/transport</title><link>https://go-micro.dev/v5/transport.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/transport.html</guid><description/></item><item><title>go-micro.dev/v5/transport/grpc</title><link>https://go-micro.dev/v5/transport/grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/transport/grpc.html</guid><description/></item><item><title>go-micro.dev/v5/transport/grpc/proto</title><link>https://go-micro.dev/v5/transport/grpc/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/transport/grpc/proto.html</guid><description/></item><item><title>go-micro.dev/v5/transport/headers</title><link>https://go-micro.dev/v5/transport/headers.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/transport/headers.html</guid><description/></item><item><title>go-micro.dev/v5/transport/nats</title><link>https://go-micro.dev/v5/transport/nats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/transport/nats.html</guid><description/></item><item><title>go-micro.dev/v5/web</title><link>https://go-micro.dev/v5/web.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/web.html</guid><description/></item><item><title>go-micro.dev/v5/wrapper/auth</title><link>https://go-micro.dev/v5/wrapper/auth.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/wrapper/auth.html</guid><description/></item><item><title>go-micro.dev/v5/wrapper/monitoring/prometheus</title><link>https://go-micro.dev/v5/wrapper/monitoring/prometheus.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/wrapper/monitoring/prometheus.html</guid><description/></item><item><title>go-micro.dev/v5/wrapper/trace/opentelemetry</title><link>https://go-micro.dev/v5/wrapper/trace/opentelemetry.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/wrapper/trace/opentelemetry.html</guid><description/></item><item><title>go-micro.dev/v5/wrapper/x402</title><link>https://go-micro.dev/v5/wrapper/x402.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v5/wrapper/x402.html</guid><description/></item><item><title>go-micro.dev/v6/agent</title><link>https://go-micro.dev/v6/agent.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/agent.html</guid><description/></item><item><title>go-micro.dev/v6/agent/proto</title><link>https://go-micro.dev/v6/agent/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/agent/proto.html</guid><description/></item><item><title>go-micro.dev/v6/ai</title><link>https://go-micro.dev/v6/ai.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/ai.html</guid><description/></item><item><title>go-micro.dev/v6/ai/anthropic</title><link>https://go-micro.dev/v6/ai/anthropic.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/ai/anthropic.html</guid><description/></item><item><title>go-micro.dev/v6/ai/atlascloud</title><link>https://go-micro.dev/v6/ai/atlascloud.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/ai/atlascloud.html</guid><description/></item><item><title>go-micro.dev/v6/ai/gemini</title><link>https://go-micro.dev/v6/ai/gemini.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/ai/gemini.html</guid><description/></item><item><title>go-micro.dev/v6/ai/groq</title><link>https://go-micro.dev/v6/ai/groq.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/ai/groq.html</guid><description/></item><item><title>go-micro.dev/v6/ai/internal/openaiapi</title><link>https://go-micro.dev/v6/ai/internal/openaiapi.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/ai/internal/openaiapi.html</guid><description/></item><item><title>go-micro.dev/v6/ai/minimax</title><link>https://go-micro.dev/v6/ai/minimax.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/ai/minimax.html</guid><description/></item><item><title>go-micro.dev/v6/ai/mistral</title><link>https://go-micro.dev/v6/ai/mistral.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/ai/mistral.html</guid><description/></item><item><title>go-micro.dev/v6/ai/ollama</title><link>https://go-micro.dev/v6/ai/ollama.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/ai/ollama.html</guid><description/></item><item><title>go-micro.dev/v6/ai/openai</title><link>https://go-micro.dev/v6/ai/openai.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/ai/openai.html</guid><description/></item><item><title>go-micro.dev/v6/ai/together</title><link>https://go-micro.dev/v6/ai/together.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/ai/together.html</guid><description/></item><item><title>go-micro.dev/v6/auth</title><link>https://go-micro.dev/v6/auth.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/auth.html</guid><description/></item><item><title>go-micro.dev/v6/auth/jwt</title><link>https://go-micro.dev/v6/auth/jwt.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/auth/jwt.html</guid><description/></item><item><title>go-micro.dev/v6/auth/jwt/token</title><link>https://go-micro.dev/v6/auth/jwt/token.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/auth/jwt/token.html</guid><description/></item><item><title>go-micro.dev/v6/auth/noop</title><link>https://go-micro.dev/v6/auth/noop.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/auth/noop.html</guid><description/></item><item><title>go-micro.dev/v6/broker</title><link>https://go-micro.dev/v6/broker.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/broker.html</guid><description/></item><item><title>go-micro.dev/v6/broker/nats</title><link>https://go-micro.dev/v6/broker/nats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/broker/nats.html</guid><description/></item><item><title>go-micro.dev/v6/broker/rabbitmq</title><link>https://go-micro.dev/v6/broker/rabbitmq.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/broker/rabbitmq.html</guid><description/></item><item><title>go-micro.dev/v6/cache</title><link>https://go-micro.dev/v6/cache.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cache.html</guid><description/></item><item><title>go-micro.dev/v6/cache/redis</title><link>https://go-micro.dev/v6/cache/redis.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cache/redis.html</guid><description/></item><item><title>go-micro.dev/v6/client</title><link>https://go-micro.dev/v6/client.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/client.html</guid><description/></item><item><title>go-micro.dev/v6/client/grpc</title><link>https://go-micro.dev/v6/client/grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/client/grpc.html</guid><description/></item><item><title>go-micro.dev/v6/cmd</title><link>https://go-micro.dev/v6/cmd.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro</title><link>https://go-micro.dev/v6/cmd/micro.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro-mcp-gateway</title><link>https://go-micro.dev/v6/cmd/micro-mcp-gateway.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro-mcp-gateway.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/a2a</title><link>https://go-micro.dev/v6/cmd/micro/a2a.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/a2a.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/ai</title><link>https://go-micro.dev/v6/cmd/micro/ai.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/ai.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/api</title><link>https://go-micro.dev/v6/cmd/micro/api.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/api.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/chat</title><link>https://go-micro.dev/v6/cmd/micro/chat.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/chat.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/cli</title><link>https://go-micro.dev/v6/cmd/micro/cli.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/cli.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/cli/agent</title><link>https://go-micro.dev/v6/cmd/micro/cli/agent.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/cli/agent.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/cli/build</title><link>https://go-micro.dev/v6/cmd/micro/cli/build.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/cli/build.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/cli/deploy</title><link>https://go-micro.dev/v6/cmd/micro/cli/deploy.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/cli/deploy.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/cli/gen</title><link>https://go-micro.dev/v6/cmd/micro/cli/gen.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/cli/gen.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/cli/generate</title><link>https://go-micro.dev/v6/cmd/micro/cli/generate.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/cli/generate.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/cli/init</title><link>https://go-micro.dev/v6/cmd/micro/cli/init.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/cli/init.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/cli/new</title><link>https://go-micro.dev/v6/cmd/micro/cli/new.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/cli/new.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/cli/new/template</title><link>https://go-micro.dev/v6/cmd/micro/cli/new/template.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/cli/new/template.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/cli/remote</title><link>https://go-micro.dev/v6/cmd/micro/cli/remote.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/cli/remote.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/cli/util</title><link>https://go-micro.dev/v6/cmd/micro/cli/util.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/cli/util.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/flow</title><link>https://go-micro.dev/v6/cmd/micro/flow.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/flow.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/inspect</title><link>https://go-micro.dev/v6/cmd/micro/inspect.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/inspect.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/loop</title><link>https://go-micro.dev/v6/cmd/micro/loop.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/loop.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/mcp</title><link>https://go-micro.dev/v6/cmd/micro/mcp.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/mcp.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/resource</title><link>https://go-micro.dev/v6/cmd/micro/resource.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/resource.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/run</title><link>https://go-micro.dev/v6/cmd/micro/run.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/run.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/run/config</title><link>https://go-micro.dev/v6/cmd/micro/run/config.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/run/config.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/run/watcher</title><link>https://go-micro.dev/v6/cmd/micro/run/watcher.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/run/watcher.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/micro/server</title><link>https://go-micro.dev/v6/cmd/micro/server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/micro/server.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/protoc-gen-micro</title><link>https://go-micro.dev/v6/cmd/protoc-gen-micro.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/protoc-gen-micro.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/protoc-gen-micro/examples/greeter</title><link>https://go-micro.dev/v6/cmd/protoc-gen-micro/examples/greeter.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/protoc-gen-micro/examples/greeter.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/protoc-gen-micro/generator</title><link>https://go-micro.dev/v6/cmd/protoc-gen-micro/generator.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/protoc-gen-micro/generator.html</guid><description/></item><item><title>go-micro.dev/v6/cmd/protoc-gen-micro/plugin/micro</title><link>https://go-micro.dev/v6/cmd/protoc-gen-micro/plugin/micro.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/cmd/protoc-gen-micro/plugin/micro.html</guid><description/></item><item><title>go-micro.dev/v6/codec</title><link>https://go-micro.dev/v6/codec.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/codec.html</guid><description/></item><item><title>go-micro.dev/v6/codec/bytes</title><link>https://go-micro.dev/v6/codec/bytes.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/codec/bytes.html</guid><description/></item><item><title>go-micro.dev/v6/codec/grpc</title><link>https://go-micro.dev/v6/codec/grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/codec/grpc.html</guid><description/></item><item><title>go-micro.dev/v6/codec/json</title><link>https://go-micro.dev/v6/codec/json.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/codec/json.html</guid><description/></item><item><title>go-micro.dev/v6/codec/jsonrpc</title><link>https://go-micro.dev/v6/codec/jsonrpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/codec/jsonrpc.html</guid><description/></item><item><title>go-micro.dev/v6/codec/proto</title><link>https://go-micro.dev/v6/codec/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/codec/proto.html</guid><description/></item><item><title>go-micro.dev/v6/codec/protorpc</title><link>https://go-micro.dev/v6/codec/protorpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/codec/protorpc.html</guid><description/></item><item><title>go-micro.dev/v6/codec/text</title><link>https://go-micro.dev/v6/codec/text.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/codec/text.html</guid><description/></item><item><title>go-micro.dev/v6/config</title><link>https://go-micro.dev/v6/config.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config.html</guid><description/></item><item><title>go-micro.dev/v6/config/encoder</title><link>https://go-micro.dev/v6/config/encoder.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/encoder.html</guid><description/></item><item><title>go-micro.dev/v6/config/encoder/json</title><link>https://go-micro.dev/v6/config/encoder/json.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/encoder/json.html</guid><description/></item><item><title>go-micro.dev/v6/config/loader</title><link>https://go-micro.dev/v6/config/loader.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/loader.html</guid><description/></item><item><title>go-micro.dev/v6/config/loader/memory</title><link>https://go-micro.dev/v6/config/loader/memory.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/loader/memory.html</guid><description/></item><item><title>go-micro.dev/v6/config/reader</title><link>https://go-micro.dev/v6/config/reader.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/reader.html</guid><description/></item><item><title>go-micro.dev/v6/config/reader/json</title><link>https://go-micro.dev/v6/config/reader/json.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/reader/json.html</guid><description/></item><item><title>go-micro.dev/v6/config/secrets</title><link>https://go-micro.dev/v6/config/secrets.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/secrets.html</guid><description/></item><item><title>go-micro.dev/v6/config/secrets/box</title><link>https://go-micro.dev/v6/config/secrets/box.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/secrets/box.html</guid><description/></item><item><title>go-micro.dev/v6/config/secrets/secretbox</title><link>https://go-micro.dev/v6/config/secrets/secretbox.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/secrets/secretbox.html</guid><description/></item><item><title>go-micro.dev/v6/config/source</title><link>https://go-micro.dev/v6/config/source.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/source.html</guid><description/></item><item><title>go-micro.dev/v6/config/source/cli</title><link>https://go-micro.dev/v6/config/source/cli.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/source/cli.html</guid><description/></item><item><title>go-micro.dev/v6/config/source/env</title><link>https://go-micro.dev/v6/config/source/env.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/source/env.html</guid><description/></item><item><title>go-micro.dev/v6/config/source/file</title><link>https://go-micro.dev/v6/config/source/file.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/source/file.html</guid><description/></item><item><title>go-micro.dev/v6/config/source/flag</title><link>https://go-micro.dev/v6/config/source/flag.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/source/flag.html</guid><description/></item><item><title>go-micro.dev/v6/config/source/memory</title><link>https://go-micro.dev/v6/config/source/memory.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/source/memory.html</guid><description/></item><item><title>go-micro.dev/v6/config/source/nats</title><link>https://go-micro.dev/v6/config/source/nats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/config/source/nats.html</guid><description/></item><item><title>go-micro.dev/v6/debug/handler</title><link>https://go-micro.dev/v6/debug/handler.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/debug/handler.html</guid><description/></item><item><title>go-micro.dev/v6/debug/log</title><link>https://go-micro.dev/v6/debug/log.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/debug/log.html</guid><description/></item><item><title>go-micro.dev/v6/debug/log/memory</title><link>https://go-micro.dev/v6/debug/log/memory.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/debug/log/memory.html</guid><description/></item><item><title>go-micro.dev/v6/debug/log/noop</title><link>https://go-micro.dev/v6/debug/log/noop.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/debug/log/noop.html</guid><description/></item><item><title>go-micro.dev/v6/debug/profile</title><link>https://go-micro.dev/v6/debug/profile.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/debug/profile.html</guid><description/></item><item><title>go-micro.dev/v6/debug/profile/http</title><link>https://go-micro.dev/v6/debug/profile/http.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/debug/profile/http.html</guid><description/></item><item><title>go-micro.dev/v6/debug/profile/pprof</title><link>https://go-micro.dev/v6/debug/profile/pprof.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/debug/profile/pprof.html</guid><description/></item><item><title>go-micro.dev/v6/debug/proto</title><link>https://go-micro.dev/v6/debug/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/debug/proto.html</guid><description/></item><item><title>go-micro.dev/v6/debug/stats</title><link>https://go-micro.dev/v6/debug/stats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/debug/stats.html</guid><description/></item><item><title>go-micro.dev/v6/debug/trace</title><link>https://go-micro.dev/v6/debug/trace.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/debug/trace.html</guid><description/></item><item><title>go-micro.dev/v6/deploy/kubernetes</title><link>https://go-micro.dev/v6/deploy/kubernetes.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/deploy/kubernetes.html</guid><description/></item><item><title>go-micro.dev/v6/errors</title><link>https://go-micro.dev/v6/errors.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/errors.html</guid><description/></item><item><title>go-micro.dev/v6/events</title><link>https://go-micro.dev/v6/events.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/events.html</guid><description/></item><item><title>go-micro.dev/v6/events/natsjs</title><link>https://go-micro.dev/v6/events/natsjs.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/events/natsjs.html</guid><description/></item><item><title>go-micro.dev/v6/examples/agent-demo</title><link>https://go-micro.dev/v6/examples/agent-demo.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/agent-demo.html</guid><description/></item><item><title>go-micro.dev/v6/examples/agent-durable</title><link>https://go-micro.dev/v6/examples/agent-durable.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/agent-durable.html</guid><description/></item><item><title>go-micro.dev/v6/examples/agent-ollama</title><link>https://go-micro.dev/v6/examples/agent-ollama.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/agent-ollama.html</guid><description/></item><item><title>go-micro.dev/v6/examples/agent-plan-delegate</title><link>https://go-micro.dev/v6/examples/agent-plan-delegate.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/agent-plan-delegate.html</guid><description/></item><item><title>go-micro.dev/v6/examples/agent-wrap-tool</title><link>https://go-micro.dev/v6/examples/agent-wrap-tool.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/agent-wrap-tool.html</guid><description/></item><item><title>go-micro.dev/v6/examples/agent-x402-buyer</title><link>https://go-micro.dev/v6/examples/agent-x402-buyer.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/agent-x402-buyer.html</guid><description/></item><item><title>go-micro.dev/v6/examples/auth/client</title><link>https://go-micro.dev/v6/examples/auth/client.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/auth/client.html</guid><description/></item><item><title>go-micro.dev/v6/examples/auth/proto</title><link>https://go-micro.dev/v6/examples/auth/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/auth/proto.html</guid><description/></item><item><title>go-micro.dev/v6/examples/auth/server</title><link>https://go-micro.dev/v6/examples/auth/server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/auth/server.html</guid><description/></item><item><title>go-micro.dev/v6/examples/first-agent</title><link>https://go-micro.dev/v6/examples/first-agent.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/first-agent.html</guid><description/></item><item><title>go-micro.dev/v6/examples/flow-durable</title><link>https://go-micro.dev/v6/examples/flow-durable.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/flow-durable.html</guid><description/></item><item><title>go-micro.dev/v6/examples/flow-loop</title><link>https://go-micro.dev/v6/examples/flow-loop.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/flow-loop.html</guid><description/></item><item><title>go-micro.dev/v6/examples/graceful-stop</title><link>https://go-micro.dev/v6/examples/graceful-stop.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/graceful-stop.html</guid><description/></item><item><title>go-micro.dev/v6/examples/grpc-interop/client</title><link>https://go-micro.dev/v6/examples/grpc-interop/client.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/grpc-interop/client.html</guid><description/></item><item><title>go-micro.dev/v6/examples/grpc-interop/proto</title><link>https://go-micro.dev/v6/examples/grpc-interop/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/grpc-interop/proto.html</guid><description/></item><item><title>go-micro.dev/v6/examples/grpc-interop/server</title><link>https://go-micro.dev/v6/examples/grpc-interop/server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/grpc-interop/server.html</guid><description/></item><item><title>go-micro.dev/v6/examples/hello-world</title><link>https://go-micro.dev/v6/examples/hello-world.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/hello-world.html</guid><description/></item><item><title>go-micro.dev/v6/examples/mcp/crud</title><link>https://go-micro.dev/v6/examples/mcp/crud.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/mcp/crud.html</guid><description/></item><item><title>go-micro.dev/v6/examples/mcp/documented</title><link>https://go-micro.dev/v6/examples/mcp/documented.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/mcp/documented.html</guid><description/></item><item><title>go-micro.dev/v6/examples/mcp/hello</title><link>https://go-micro.dev/v6/examples/mcp/hello.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/mcp/hello.html</guid><description/></item><item><title>go-micro.dev/v6/examples/mcp/platform</title><link>https://go-micro.dev/v6/examples/mcp/platform.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/mcp/platform.html</guid><description/></item><item><title>go-micro.dev/v6/examples/mcp/workflow</title><link>https://go-micro.dev/v6/examples/mcp/workflow.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/mcp/workflow.html</guid><description/></item><item><title>go-micro.dev/v6/examples/multi-service</title><link>https://go-micro.dev/v6/examples/multi-service.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/multi-service.html</guid><description/></item><item><title>go-micro.dev/v6/examples/support</title><link>https://go-micro.dev/v6/examples/support.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/support.html</guid><description/></item><item><title>go-micro.dev/v6/examples/web-service</title><link>https://go-micro.dev/v6/examples/web-service.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/examples/web-service.html</guid><description/></item><item><title>go-micro.dev/v6/flow</title><link>https://go-micro.dev/v6/flow.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/flow.html</guid><description/></item><item><title>go-micro.dev/v6/gateway/a2a</title><link>https://go-micro.dev/v6/gateway/a2a.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/gateway/a2a.html</guid><description/></item><item><title>go-micro.dev/v6/gateway/api</title><link>https://go-micro.dev/v6/gateway/api.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/gateway/api.html</guid><description/></item><item><title>go-micro.dev/v6/gateway/mcp</title><link>https://go-micro.dev/v6/gateway/mcp.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/gateway/mcp.html</guid><description/></item><item><title>go-micro.dev/v6/health</title><link>https://go-micro.dev/v6/health.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/health.html</guid><description/></item><item><title>go-micro.dev/v6/internal/harness/a2a-stream-fallback</title><link>https://go-micro.dev/v6/internal/harness/a2a-stream-fallback.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/harness/a2a-stream-fallback.html</guid><description/></item><item><title>go-micro.dev/v6/internal/harness/a2a-streaming</title><link>https://go-micro.dev/v6/internal/harness/a2a-streaming.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/harness/a2a-streaming.html</guid><description/></item><item><title>go-micro.dev/v6/internal/harness/agent-flow</title><link>https://go-micro.dev/v6/internal/harness/agent-flow.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/harness/agent-flow.html</guid><description/></item><item><title>go-micro.dev/v6/internal/harness/harnessutil</title><link>https://go-micro.dev/v6/internal/harness/harnessutil.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/harness/harnessutil.html</guid><description/></item><item><title>go-micro.dev/v6/internal/harness/plan-delegate</title><link>https://go-micro.dev/v6/internal/harness/plan-delegate.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/harness/plan-delegate.html</guid><description/></item><item><title>go-micro.dev/v6/internal/harness/provider-conformance</title><link>https://go-micro.dev/v6/internal/harness/provider-conformance.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/harness/provider-conformance.html</guid><description/></item><item><title>go-micro.dev/v6/internal/harness/universe</title><link>https://go-micro.dev/v6/internal/harness/universe.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/harness/universe.html</guid><description/></item><item><title>go-micro.dev/v6/internal/network</title><link>https://go-micro.dev/v6/internal/network.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/network.html</guid><description/></item><item><title>go-micro.dev/v6/internal/test</title><link>https://go-micro.dev/v6/internal/test.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/test.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/addr</title><link>https://go-micro.dev/v6/internal/util/addr.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/addr.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/backoff</title><link>https://go-micro.dev/v6/internal/util/backoff.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/backoff.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/buf</title><link>https://go-micro.dev/v6/internal/util/buf.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/buf.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/grpc</title><link>https://go-micro.dev/v6/internal/util/grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/grpc.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/http</title><link>https://go-micro.dev/v6/internal/util/http.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/http.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/jitter</title><link>https://go-micro.dev/v6/internal/util/jitter.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/jitter.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/mdns</title><link>https://go-micro.dev/v6/internal/util/mdns.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/mdns.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/net</title><link>https://go-micro.dev/v6/internal/util/net.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/net.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/pool</title><link>https://go-micro.dev/v6/internal/util/pool.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/pool.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/registry</title><link>https://go-micro.dev/v6/internal/util/registry.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/registry.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/ring</title><link>https://go-micro.dev/v6/internal/util/ring.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/ring.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/signal</title><link>https://go-micro.dev/v6/internal/util/signal.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/signal.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/socket</title><link>https://go-micro.dev/v6/internal/util/socket.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/socket.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/test</title><link>https://go-micro.dev/v6/internal/util/test.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/test.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/tls</title><link>https://go-micro.dev/v6/internal/util/tls.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/tls.html</guid><description/></item><item><title>go-micro.dev/v6/internal/util/wrapper</title><link>https://go-micro.dev/v6/internal/util/wrapper.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/internal/util/wrapper.html</guid><description/></item><item><title>go-micro.dev/v6/logger</title><link>https://go-micro.dev/v6/logger.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/logger.html</guid><description/></item><item><title>go-micro.dev/v6/metadata</title><link>https://go-micro.dev/v6/metadata.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/metadata.html</guid><description/></item><item><title>go-micro.dev/v6/model</title><link>https://go-micro.dev/v6/model.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/model.html</guid><description/></item><item><title>go-micro.dev/v6/model/memory</title><link>https://go-micro.dev/v6/model/memory.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/model/memory.html</guid><description/></item><item><title>go-micro.dev/v6/model/postgres</title><link>https://go-micro.dev/v6/model/postgres.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/model/postgres.html</guid><description/></item><item><title>go-micro.dev/v6/model/sqlite</title><link>https://go-micro.dev/v6/model/sqlite.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/model/sqlite.html</guid><description/></item><item><title>go-micro.dev/v6/registry</title><link>https://go-micro.dev/v6/registry.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/registry.html</guid><description/></item><item><title>go-micro.dev/v6/registry/cache</title><link>https://go-micro.dev/v6/registry/cache.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/registry/cache.html</guid><description/></item><item><title>go-micro.dev/v6/registry/consul</title><link>https://go-micro.dev/v6/registry/consul.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/registry/consul.html</guid><description/></item><item><title>go-micro.dev/v6/registry/etcd</title><link>https://go-micro.dev/v6/registry/etcd.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/registry/etcd.html</guid><description/></item><item><title>go-micro.dev/v6/registry/nats</title><link>https://go-micro.dev/v6/registry/nats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/registry/nats.html</guid><description/></item><item><title>go-micro.dev/v6/selector</title><link>https://go-micro.dev/v6/selector.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/selector.html</guid><description/></item><item><title>go-micro.dev/v6/server</title><link>https://go-micro.dev/v6/server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/server.html</guid><description/></item><item><title>go-micro.dev/v6/server/grpc</title><link>https://go-micro.dev/v6/server/grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/server/grpc.html</guid><description/></item><item><title>go-micro.dev/v6/server/mock</title><link>https://go-micro.dev/v6/server/mock.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/server/mock.html</guid><description/></item><item><title>go-micro.dev/v6/server/proto</title><link>https://go-micro.dev/v6/server/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/server/proto.html</guid><description/></item><item><title>go-micro.dev/v6/service</title><link>https://go-micro.dev/v6/service.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/service.html</guid><description/></item><item><title>go-micro.dev/v6/service/profile</title><link>https://go-micro.dev/v6/service/profile.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/service/profile.html</guid><description/></item><item><title>go-micro.dev/v6/store</title><link>https://go-micro.dev/v6/store.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/store.html</guid><description/></item><item><title>go-micro.dev/v6/store/mysql</title><link>https://go-micro.dev/v6/store/mysql.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/store/mysql.html</guid><description/></item><item><title>go-micro.dev/v6/store/nats-js-kv</title><link>https://go-micro.dev/v6/store/nats-js-kv.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/store/nats-js-kv.html</guid><description/></item><item><title>go-micro.dev/v6/store/postgres</title><link>https://go-micro.dev/v6/store/postgres.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/store/postgres.html</guid><description/></item><item><title>go-micro.dev/v6/store/postgres/pgx</title><link>https://go-micro.dev/v6/store/postgres/pgx.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/store/postgres/pgx.html</guid><description/></item><item><title>go-micro.dev/v6/transport</title><link>https://go-micro.dev/v6/transport.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/transport.html</guid><description/></item><item><title>go-micro.dev/v6/transport/grpc</title><link>https://go-micro.dev/v6/transport/grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/transport/grpc.html</guid><description/></item><item><title>go-micro.dev/v6/transport/grpc/proto</title><link>https://go-micro.dev/v6/transport/grpc/proto.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/transport/grpc/proto.html</guid><description/></item><item><title>go-micro.dev/v6/transport/headers</title><link>https://go-micro.dev/v6/transport/headers.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/transport/headers.html</guid><description/></item><item><title>go-micro.dev/v6/transport/nats</title><link>https://go-micro.dev/v6/transport/nats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/transport/nats.html</guid><description/></item><item><title>go-micro.dev/v6/web</title><link>https://go-micro.dev/v6/web.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/web.html</guid><description/></item><item><title>go-micro.dev/v6/wrapper/auth</title><link>https://go-micro.dev/v6/wrapper/auth.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/wrapper/auth.html</guid><description/></item><item><title>go-micro.dev/v6/wrapper/monitoring/prometheus</title><link>https://go-micro.dev/v6/wrapper/monitoring/prometheus.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/wrapper/monitoring/prometheus.html</guid><description/></item><item><title>go-micro.dev/v6/wrapper/trace/opentelemetry</title><link>https://go-micro.dev/v6/wrapper/trace/opentelemetry.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/wrapper/trace/opentelemetry.html</guid><description/></item><item><title>go-micro.dev/v6/wrapper/x402</title><link>https://go-micro.dev/v6/wrapper/x402.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/v6/wrapper/x402.html</guid><description/></item><item><title>Graceful Shutdown</title><link>https://go-micro.dev/docs/examples/realworld/graceful-shutdown.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/examples/realworld/graceful-shutdown.html</guid><description>&lt;p&gt;Properly shutting down services to avoid dropped requests and data loss.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The Problem&lt;a class="td-heading-self-link" href="#the-problem" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Without graceful shutdown:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In-flight requests are dropped&lt;/li&gt;
&lt;li&gt;Database connections leak&lt;/li&gt;
&lt;li&gt;Resources aren&amp;rsquo;t cleaned up&lt;/li&gt;
&lt;li&gt;Load balancers don&amp;rsquo;t know service is down&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="solution"&gt;Solution&lt;a class="td-heading-self-link" href="#solution" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro handles SIGTERM/SIGINT by default, but you need to implement cleanup logic.&lt;/p&gt;
&lt;h2 id="basic-pattern"&gt;Basic Pattern&lt;a class="td-heading-self-link" href="#basic-pattern" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;os&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;os/signal&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;syscall&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/logger&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;myservice&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;BeforeStop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Service stopping, running cleanup...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cleanup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Your service logic&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Handler&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Run with graceful shutdown&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Service stopped gracefully&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cleanup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Close database connections&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Flush logs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Stop background workers&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// etc.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="database-cleanup"&gt;Database Cleanup&lt;a class="td-heading-self-link" href="#database-cleanup" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;sql&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Shutdown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Closing database connections...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Stop accepting new requests&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SetMaxOpenConns&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Wait for existing connections to finish (with timeout)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;done&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;chan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;go&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;done&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="nx"&gt;done&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Database closed gracefully&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Done&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Warn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Database close timeout, forcing&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Err&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="background-workers"&gt;Background Workers&lt;a class="td-heading-self-link" href="#background-workers" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Worker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;quit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;chan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;done&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;chan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;quit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;chan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;done&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;chan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;go&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;defer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;done&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ticker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewTicker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Second&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;defer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ticker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="nx"&gt;ticker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;doWork&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;quit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Worker stopping...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;timeout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;quit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;done&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Worker stopped gracefully&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;After&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Errorf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;worker shutdown timeout&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="complete-example"&gt;Complete Example&lt;a class="td-heading-self-link" href="#complete-example" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;database/sql&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;os&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;os/signal&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sync&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;syscall&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/logger&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Application&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;sql&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;workers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Worker&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;wg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sync&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;WaitGroup&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sync&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RWMutex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;closing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;NewApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;sql&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Application&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;workers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;AddWorker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;workers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;workers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Application&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Shutdown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mu&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Lock&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;closing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mu&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Unlock&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;closing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mu&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Unlock&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Starting graceful shutdown...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Stop accepting new work&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Stopping workers...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;range&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;workers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Second&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Warnf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Worker failed to stop: %v&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Wait for in-flight requests (with timeout)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;shutdownComplete&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;chan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;go&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Wait&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shutdownComplete&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="nx"&gt;shutdownComplete&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;All requests completed&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Done&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Warn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Shutdown timeout, forcing...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Close resources&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Closing database...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Errorf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Database close error: %v&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Shutdown complete&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sql&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;postgres&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;DATABASE_URL&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;NewApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Add background workers&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddWorker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;cleanup&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddWorker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;metrics&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;myservice&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;BeforeStop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cancel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Background&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Second&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;defer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cancel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Shutdown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;Handler&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Run service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="kubernetes-integration"&gt;Kubernetes Integration&lt;a class="td-heading-self-link" href="#kubernetes-integration" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="liveness-and-readiness-probes"&gt;Liveness and Readiness Probes&lt;a class="td-heading-self-link" href="#liveness-and-readiness-probes" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Handler&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Health&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;HealthResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Liveness: is the service alive?&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ok&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Handler&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Ready&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;ReadyResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mu&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RLock&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;closing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;closing&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mu&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RUnlock&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;closing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Stop receiving traffic during shutdown&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Errorf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;shutting down&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Check dependencies&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Ping&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Errorf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;database unhealthy: %w&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ready&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="kubernetes-manifest"&gt;Kubernetes Manifest&lt;a class="td-heading-self-link" href="#kubernetes-manifest" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;myservice&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;myservice&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;myservice:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;livenessProbe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;httpGet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/health&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;periodSeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;readinessProbe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;httpGet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/ready&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;periodSeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lifecycle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preStop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Give service time to drain before SIGTERM&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/bin/sh&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;-c&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;sleep 10&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;terminationGracePeriodSeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="best-practices"&gt;Best Practices&lt;a class="td-heading-self-link" href="#best-practices" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Set timeouts&lt;/strong&gt;: Don&amp;rsquo;t wait forever for shutdown&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stop accepting work early&lt;/strong&gt;: Set readiness to false&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Drain in-flight requests&lt;/strong&gt;: Let current work finish&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Close resources properly&lt;/strong&gt;: Databases, file handles, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Log shutdown progress&lt;/strong&gt;: Help debugging&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Handle SIGTERM and SIGINT&lt;/strong&gt;: Kubernetes sends SIGTERM&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coordinate with load balancer&lt;/strong&gt;: Use readiness probes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test shutdown&lt;/strong&gt;: Regularly test graceful shutdown works&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="testing-shutdown"&gt;Testing Shutdown&lt;a class="td-heading-self-link" href="#testing-shutdown" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Start service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go run main.go &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;PID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Send some requests&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; i in &lt;span class="o"&gt;{&lt;/span&gt;1..10&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; curl http://localhost:8080/endpoint &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Trigger graceful shutdown&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;kill&lt;/span&gt; -TERM &lt;span class="nv"&gt;$PID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Verify all requests completed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;wait&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="common-pitfalls"&gt;Common Pitfalls&lt;a class="td-heading-self-link" href="#common-pitfalls" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No timeout&lt;/strong&gt;: Service hangs during shutdown&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not stopping workers&lt;/strong&gt;: Background jobs continue&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database leaks&lt;/strong&gt;: Connections not closed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ignored signals&lt;/strong&gt;: Service killed forcefully&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No readiness probe&lt;/strong&gt;: Traffic during shutdown&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="related"&gt;Related&lt;a class="td-heading-self-link" href="#related" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://go-micro.dev/docs/examples/realworld/api-gateway.html"&gt;API Gateway Example&lt;/a&gt; - Multi-service architecture&lt;/li&gt;
&lt;li&gt;&lt;a href="https://go-micro.dev/docs/getting-started.html"&gt;Getting Started Guide&lt;/a&gt; - Basic service setup&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Health Checks</title><link>https://go-micro.dev/docs/guides/health.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/health.html</guid><description>&lt;p&gt;The &lt;code&gt;health&lt;/code&gt; package provides health check functionality for microservices, including Kubernetes-style liveness and readiness probes.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;a class="td-heading-self-link" href="#quick-start" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/health&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Register health checks&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;health&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;database&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;health&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;PingCheck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Ping&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;health&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;cache&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;health&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TCPCheck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;localhost:6379&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Second&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Add health endpoints&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mux&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewServeMux&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;health&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RegisterHandlers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mux&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Registers /health, /health/live, /health/ready&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ListenAndServe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;:8080&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mux&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="endpoints"&gt;Endpoints&lt;a class="td-heading-self-link" href="#endpoints" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Endpoint&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
					&lt;th&gt;Returns 200 when&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/health&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Overall health status&lt;/td&gt;
					&lt;td&gt;All critical checks pass&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/health/live&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Kubernetes liveness probe&lt;/td&gt;
					&lt;td&gt;Service is running&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/health/ready&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Kubernetes readiness probe&lt;/td&gt;
					&lt;td&gt;All critical checks pass&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="response-format"&gt;Response Format&lt;a class="td-heading-self-link" href="#response-format" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;up&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;checks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;database&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;up&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;duration&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1234567&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;cache&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;up&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;duration&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;567890&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;info&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;go_version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;go1.22.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;go_os&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;linux&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;go_arch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;amd64&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When unhealthy:&lt;/p&gt;</description></item><item><title>Hello Service</title><link>https://go-micro.dev/docs/examples/hello-service.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/examples/hello-service.html</guid><description>&lt;p&gt;A minimal HTTP service using Go Micro, with a single endpoint.&lt;/p&gt;
&lt;h2 id="service"&gt;Service&lt;a class="td-heading-self-link" href="#service" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;name&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;message&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Say&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Say&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello &amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;helloworld&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Say&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run it:&lt;/p&gt;</description></item><item><title>Hello Service</title><link>https://go-micro.dev/docs/examples/learn-by-examples/hello-service.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/examples/learn-by-examples/hello-service.html</guid><description>&lt;h2 id="service"&gt;Service&lt;a class="td-heading-self-link" href="#service" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;name&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;`json:&amp;#34;message&amp;#34;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Say&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Say&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello &amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;helloworld&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Say&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run it:&lt;/p&gt;</description></item><item><title>Hosting</title><link>https://go-micro.dev/docs/hosting.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/hosting.html</guid><description>&lt;h1 id="hosting-go-micro-services"&gt;Hosting Go Micro Services&lt;a class="td-heading-self-link" href="#hosting-go-micro-services" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This document outlines what hosting looks like for go-micro services, the options available today, and what an ideal hosting platform would provide.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro services are compiled Go binaries that communicate via RPC and event-driven messaging. Hosting them requires infrastructure that supports service discovery, inter-service communication, persistent storage, and configuration management. Because go-micro uses a pluggable architecture, the hosting environment can range from a single VPS to a fully orchestrated cluster.&lt;/p&gt;</description></item><item><title>Install troubleshooting</title><link>https://go-micro.dev/docs/guides/install-troubleshooting.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/install-troubleshooting.html</guid><description>&lt;h1 id="install-troubleshooting"&gt;Install troubleshooting&lt;a class="td-heading-self-link" href="#install-troubleshooting" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Use this page before &lt;code&gt;micro new&lt;/code&gt; or &lt;code&gt;micro agent demo&lt;/code&gt; when the CLI install is
unclear. The goal is to prove three boundaries in order: the &lt;code&gt;micro&lt;/code&gt; binary is on
&lt;code&gt;PATH&lt;/code&gt;, it is the version you expected, and the no-secret first-run path works
without provider keys.&lt;/p&gt;
&lt;h2 id="1-choose-one-install-path"&gt;1. Choose one install path&lt;a class="td-heading-self-link" href="#1-choose-one-install-path" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="binary-installer-no-go-required-to-install"&gt;Binary installer (no Go required to install)&lt;a class="td-heading-self-link" href="#binary-installer-no-go-required-to-install" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://go-micro.dev/install.sh &lt;span class="p"&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Use this when you want the released &lt;code&gt;micro&lt;/code&gt; binary without building it yourself.
The generated services still need a Go toolchain when you run &lt;code&gt;micro run&lt;/code&gt;, but the
installer itself does not require Go.&lt;/p&gt;</description></item><item><title>MCP Security Guide</title><link>https://go-micro.dev/docs/guides/mcp-security.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/mcp-security.html</guid><description>&lt;p&gt;This guide covers how to secure your MCP gateway for production use, including authentication, per-tool scopes, rate limiting, and audit logging.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The MCP gateway provides four layers of security:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Authentication&lt;/strong&gt; - Verify the caller&amp;rsquo;s identity via bearer tokens&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scopes&lt;/strong&gt; - Control which tools each token can access&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rate Limiting&lt;/strong&gt; - Prevent abuse with per-tool rate limits&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit Logging&lt;/strong&gt; - Record every tool call for compliance and debugging&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;a class="td-heading-self-link" href="#authentication" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="bearer-token-auth"&gt;Bearer Token Auth&lt;a class="td-heading-self-link" href="#bearer-token-auth" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The MCP gateway uses bearer token authentication. Tokens are validated by the configured &lt;code&gt;auth.Auth&lt;/code&gt; provider.&lt;/p&gt;</description></item><item><title>MCP Troubleshooting</title><link>https://go-micro.dev/docs/guides/troubleshooting.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/troubleshooting.html</guid><description>&lt;h1 id="mcp-troubleshooting"&gt;MCP Troubleshooting&lt;a class="td-heading-self-link" href="#mcp-troubleshooting" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Common issues when using the MCP gateway and AI agents with Go Micro services.&lt;/p&gt;
&lt;h2 id="agent-cant-find-my-tools"&gt;Agent Can&amp;rsquo;t Find My Tools&lt;a class="td-heading-self-link" href="#agent-cant-find-my-tools" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; Agent says &amp;ldquo;no tools available&amp;rdquo; or doesn&amp;rsquo;t list your service endpoints.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Check 1: Is the service registered?&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List registered services&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro services
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If your service isn&amp;rsquo;t listed, it hasn&amp;rsquo;t registered with the registry. Make sure your service is running and using the same registry as the MCP gateway.&lt;/p&gt;</description></item><item><title>micro run - Local Development</title><link>https://go-micro.dev/docs/guides/micro-run.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/micro-run.html</guid><description>&lt;p&gt;&lt;code&gt;micro run&lt;/code&gt; provides a complete development environment for Go microservices.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This guide focuses on &lt;code&gt;micro run&lt;/code&gt; features. For a comparison with &lt;code&gt;micro server&lt;/code&gt; and gateway architecture details, see the &lt;a href="https://go-micro.dev/docs/guides/cli-gateway.html"&gt;CLI &amp;amp; Gateway Guide&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;a class="td-heading-self-link" href="#quick-start" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro new helloworld
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; helloworld
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Open http://localhost:8080 to see your service.&lt;/p&gt;
&lt;h2 id="what-you-get"&gt;What You Get&lt;a class="td-heading-self-link" href="#what-you-get" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When you run &lt;code&gt;micro run&lt;/code&gt;, you get:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;URL&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;http://localhost:8080&lt;/td&gt;
					&lt;td&gt;Web dashboard - browse and call services&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;http://localhost:8080/agent&lt;/td&gt;
					&lt;td&gt;Agent playground - AI chat with MCP tools&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;http://localhost:8080/api&lt;/td&gt;
					&lt;td&gt;API explorer - browse endpoints and schemas&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;http://localhost:8080/api/{service}/{method}&lt;/td&gt;
					&lt;td&gt;API gateway - HTTP to RPC proxy&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;http://localhost:8080/mcp/tools&lt;/td&gt;
					&lt;td&gt;MCP tools - list all services as AI tools&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;http://localhost:8080/auth/tokens&lt;/td&gt;
					&lt;td&gt;Token management - create and manage API tokens&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;http://localhost:8080/auth/scopes&lt;/td&gt;
					&lt;td&gt;Scope management - restrict endpoint access&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;http://localhost:8080/auth/users&lt;/td&gt;
					&lt;td&gt;User management - create and manage users&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;http://localhost:8080/health&lt;/td&gt;
					&lt;td&gt;Health checks - aggregated service health&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;http://localhost:8080/services&lt;/td&gt;
					&lt;td&gt;Service list - JSON&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Plus:&lt;/p&gt;</description></item><item><title>Micro Server (Optional)</title><link>https://go-micro.dev/docs/server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/server.html</guid><description>&lt;p&gt;The Micro server is an optional web dashboard and authenticated API gateway for production environments. It provides a secure entrypoint for discovering and interacting with services that are already running (e.g., managed by systemd via &lt;code&gt;micro deploy&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;micro server&lt;/code&gt; does not build, run, or watch services.&lt;/strong&gt; It only discovers services via the registry and provides a UI/API to interact with them.&lt;/p&gt;
&lt;h2 id="micro-server-vs-micro-run"&gt;micro server vs micro run&lt;a class="td-heading-self-link" href="#micro-server-vs-micro-run" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;&lt;code&gt;micro run&lt;/code&gt;&lt;/th&gt;
					&lt;th&gt;&lt;code&gt;micro server&lt;/code&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Purpose&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Local development&lt;/td&gt;
					&lt;td&gt;Production dashboard&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Builds services&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Runs services&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (as child processes)&lt;/td&gt;
					&lt;td&gt;No (discovers already-running services)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Hot reload&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Authentication&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (default &lt;code&gt;admin&lt;/code&gt;/&lt;code&gt;micro&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;Yes (default &lt;code&gt;admin&lt;/code&gt;/&lt;code&gt;micro&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Scopes&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Yes (&lt;code&gt;/auth/scopes&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;Yes (&lt;code&gt;/auth/scopes&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Full gateway UI with auth, scopes, agent&lt;/td&gt;
					&lt;td&gt;Full dashboard with API explorer, logs, user/token management&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;When to use&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Day-to-day development&lt;/td&gt;
					&lt;td&gt;Deployed environments, shared servers&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For local development, use &lt;a href="https://go-micro.dev/docs/guides/micro-run.html"&gt;&lt;code&gt;micro run&lt;/code&gt;&lt;/a&gt; instead.&lt;/p&gt;</description></item><item><title>Migrating from gRPC</title><link>https://go-micro.dev/docs/guides/migration/from-grpc.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/migration/from-grpc.html</guid><description>&lt;p&gt;Step-by-step guide to migrating existing gRPC services to Go Micro.&lt;/p&gt;
&lt;h2 id="why-migrate"&gt;Why Migrate?&lt;a class="td-heading-self-link" href="#why-migrate" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro adds:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Built-in service discovery&lt;/li&gt;
&lt;li&gt;Client-side load balancing&lt;/li&gt;
&lt;li&gt;Pub/sub messaging&lt;/li&gt;
&lt;li&gt;Multiple transport options&lt;/li&gt;
&lt;li&gt;Unified tooling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You keep:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your proto definitions&lt;/li&gt;
&lt;li&gt;gRPC performance (via gRPC transport)&lt;/li&gt;
&lt;li&gt;Type safety&lt;/li&gt;
&lt;li&gt;Streaming support&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="migration-strategy"&gt;Migration Strategy&lt;a class="td-heading-self-link" href="#migration-strategy" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="phase-1-parallel-running"&gt;Phase 1: Parallel Running&lt;a class="td-heading-self-link" href="#phase-1-parallel-running" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Run Go Micro alongside existing gRPC services&lt;/p&gt;
&lt;h3 id="phase-2-gradual-migration"&gt;Phase 2: Gradual Migration&lt;a class="td-heading-self-link" href="#phase-2-gradual-migration" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Migrate services one at a time&lt;/p&gt;</description></item><item><title>Migrating from v5 to v6</title><link>https://go-micro.dev/docs/guides/migration/v5-to-v6.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/migration/v5-to-v6.html</guid><description>&lt;p&gt;v6 is a small, mechanical upgrade. The bulk of it is the Go module path; the
behavioral changes are two, both with a one-line fix.&lt;/p&gt;
&lt;h2 id="1-module-path-go-microdevv6"&gt;1. Module path: &lt;code&gt;go-micro.dev/v6&lt;/code&gt;&lt;a class="td-heading-self-link" href="#1-module-path-go-microdevv6" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go puts the major version in the import path, so every import changes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// before&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v5&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v5/server&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// after&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/server&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A repo-wide find/replace does it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;grep -rl &lt;span class="s1"&gt;&amp;#39;go-micro.dev/v5&amp;#39;&lt;/span&gt; --include&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;*.go&amp;#39;&lt;/span&gt; . &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; xargs sed -i &lt;span class="s1"&gt;&amp;#39;s|go-micro.dev/v5|go-micro.dev/v6|g&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go mod tidy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Update the CLI too:&lt;/p&gt;</description></item><item><title>Model Context Protocol (MCP)</title><link>https://go-micro.dev/docs/mcp.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/mcp.html</guid><description>&lt;p&gt;Go Micro provides built-in support for the &lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol (MCP)&lt;/a&gt;, enabling AI agents like Claude to discover and interact with your microservices as tools.&lt;/p&gt;
&lt;img src="https://go-micro.dev/images/generated/mcp-agent.jpg" alt="AI agent calling microservices via MCP" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;MCP gateway automatically exposes your microservices as AI-accessible tools through:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automatic service discovery&lt;/strong&gt; via the registry&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic tool generation&lt;/strong&gt; from service endpoints&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stdio transport&lt;/strong&gt; for local AI tools (Claude Code, etc.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP/SSE transport&lt;/strong&gt; for web-based agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic documentation extraction&lt;/strong&gt; from Go comments&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;a class="td-heading-self-link" href="#quick-start" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="1-add-documentation-to-your-service"&gt;1. Add Documentation to Your Service&lt;a class="td-heading-self-link" href="#1-add-documentation-to-your-service" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Simply write Go doc comments on your handler methods:&lt;/p&gt;</description></item><item><title>Native gRPC Compatibility</title><link>https://go-micro.dev/docs/guides/grpc-compatibility.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/grpc-compatibility.html</guid><description>&lt;p&gt;This guide explains how to make your Go Micro services compatible with native gRPC clients like &lt;code&gt;grpcurl&lt;/code&gt;, &lt;code&gt;grpcui&lt;/code&gt;, or clients generated by the standard &lt;code&gt;protoc&lt;/code&gt; gRPC plugin in any language.&lt;/p&gt;
&lt;h2 id="understanding-transport-vs-server"&gt;Understanding Transport vs Server&lt;a class="td-heading-self-link" href="#understanding-transport-vs-server" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro has two different gRPC-related concepts that are often confused:&lt;/p&gt;
&lt;h3 id="grpc-transport-go-microdevv6transportgrpc"&gt;gRPC Transport (&lt;code&gt;go-micro.dev/v6/transport/grpc&lt;/code&gt;)&lt;a class="td-heading-self-link" href="#grpc-transport-go-microdevv6transportgrpc" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The gRPC &lt;strong&gt;transport&lt;/strong&gt; uses the gRPC protocol as a communication layer, similar to how you might use NATS, RabbitMQ, or HTTP. It does &lt;strong&gt;not&lt;/strong&gt; guarantee compatibility with native gRPC clients.&lt;/p&gt;</description></item><item><title>NATS Transport</title><link>https://go-micro.dev/docs/examples/transport-nats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/examples/transport-nats.html</guid><description>&lt;p&gt;Use NATS as the transport between services.&lt;/p&gt;
&lt;h2 id="in-code"&gt;In code&lt;a class="td-heading-self-link" href="#in-code" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tnats&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/transport/nats&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tnats&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewTransport&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;nats-transport&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Transport&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="via-environment"&gt;Via environment&lt;a class="td-heading-self-link" href="#via-environment" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Run your service with env vars set:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;MICRO_TRANSPORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nats &lt;span class="nv"&gt;MICRO_TRANSPORT_ADDRESS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nats://127.0.0.1:4222 go run main.go
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>No-secret first-agent transcript</title><link>https://go-micro.dev/docs/guides/no-secret-first-agent.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/no-secret-first-agent.html</guid><description>&lt;p&gt;This is the fastest first-agent success path when you do not have a provider key
handy. It starts from the maintained &lt;code&gt;examples/support&lt;/code&gt; app and uses the
repository harness that CI already runs: real Go Micro services, registry,
broker, client, store, agent loop, flow handoff, and guardrail code with only the
LLM provider mocked.&lt;/p&gt;
&lt;p&gt;Use it before the live-provider &lt;a href="https://go-micro.dev/docs/guides/your-first-agent.html"&gt;Your First Agent&lt;/a&gt;
walkthrough when you want to see the services → agents → workflows lifecycle run
end to end with no secrets.&lt;/p&gt;</description></item><item><title>Observability</title><link>https://go-micro.dev/docs/observability.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/observability.html</guid><description>&lt;img src="https://go-micro.dev/images/generated/observability.jpg" alt="Observability" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;p&gt;Observability in Go Micro spans logs, metrics, and traces. The goal is rapid insight into service behavior with minimal configuration.&lt;/p&gt;
&lt;h2 id="core-principles"&gt;Core Principles&lt;a class="td-heading-self-link" href="#core-principles" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Structured Logs – Machine-parsable, leveled output&lt;/li&gt;
&lt;li&gt;Metrics – Quantitative trends (counters, gauges, histograms)&lt;/li&gt;
&lt;li&gt;Traces – Request flows across service boundaries&lt;/li&gt;
&lt;li&gt;Correlation – IDs flowing through all three signals&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="logging"&gt;Logging&lt;a class="td-heading-self-link" href="#logging" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The default logger can be replaced. Use env vars to adjust level:&lt;/p&gt;</description></item><item><title>Payments (x402)</title><link>https://go-micro.dev/docs/guides/x402-payments.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/x402-payments.html</guid><description>&lt;p&gt;Go Micro can require a payment before a tool runs, using &lt;a href="https://x402.org"&gt;x402&lt;/a&gt; — the open HTTP &lt;strong&gt;402 Payment Required&lt;/strong&gt; standard for stablecoin payments, designed for AI agents and onchain APIs. It lets every Go Micro endpoint, already exposed as an AI-callable tool, become a &lt;em&gt;paid&lt;/em&gt; tool: a service answers a call with &lt;code&gt;402&lt;/code&gt; and payment requirements, the client pays and retries, and the gateway verifies the payment before serving.&lt;/p&gt;
&lt;p&gt;Payments are &lt;strong&gt;opt-in&lt;/strong&gt; and &lt;strong&gt;dependency-light&lt;/strong&gt;. Go Micro carries no chain or crypto code — it speaks the protocol and delegates verification and settlement to a pluggable &lt;strong&gt;facilitator&lt;/strong&gt; (Coinbase CDP, Alchemy, or self-hosted), so Base and Solana are just different facilitators behind one interface.&lt;/p&gt;</description></item><item><title>Performance Considerations</title><link>https://go-micro.dev/docs/performance.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/performance.html</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;go-micro is designed for &lt;strong&gt;developer productivity and ease of use&lt;/strong&gt; while maintaining good performance for most use cases. This document explains the performance characteristics and trade-offs.&lt;/p&gt;
&lt;h2 id="reflection-usage"&gt;Reflection Usage&lt;a class="td-heading-self-link" href="#reflection-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;go-micro uses Go&amp;rsquo;s reflection package to enable its core feature: &lt;strong&gt;registering any Go struct as a service handler&lt;/strong&gt; without code generation or boilerplate.&lt;/p&gt;
&lt;h3 id="why-reflection"&gt;Why Reflection?&lt;a class="td-heading-self-link" href="#why-reflection" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Simple handler registration - no proto files, no code generation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GreeterService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;GreeterService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SayHello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello &amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;GreeterService&lt;/span&gt;&lt;span class="p"&gt;{}))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This simplicity is &lt;strong&gt;only possible with reflection&lt;/strong&gt;. Alternative approaches (like gRPC or psrpc) require:&lt;/p&gt;</description></item><item><title>Plan &amp; Delegate</title><link>https://go-micro.dev/docs/guides/plan-delegate.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/plan-delegate.html</guid><description>&lt;p&gt;Every Go Micro agent has two built-in capabilities, on top of the service tools it discovers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;plan&lt;/code&gt;&lt;/strong&gt; — record an ordered plan in memory before doing multi-step work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;delegate&lt;/code&gt;&lt;/strong&gt; — hand a self-contained subtask to another agent.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They are exposed to the model as ordinary tools. There is no separate graph runtime to configure — these harness capabilities are tools, and the agent calls them the same way it calls a service endpoint. They are added automatically to every agent, so you don&amp;rsquo;t wire anything up. &lt;code&gt;micro chat&lt;/code&gt; exposes them too, so you get planning and delegation even when talking to your services directly.&lt;/p&gt;</description></item><item><title>Plugins</title><link>https://go-micro.dev/docs/plugins.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/plugins.html</guid><description>&lt;p&gt;Plugins are scoped under each interface directory within this repository. To use a plugin, import it directly from the corresponding interface subpackage and pass it to your service via options.&lt;/p&gt;
&lt;p&gt;Common interfaces and locations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registry: &lt;code&gt;go-micro.dev/v6/registry/*&lt;/code&gt; (e.g. &lt;code&gt;consul&lt;/code&gt;, &lt;code&gt;etcd&lt;/code&gt;, &lt;code&gt;nats&lt;/code&gt;, &lt;code&gt;mdns&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Broker: &lt;code&gt;go-micro.dev/v6/broker/*&lt;/code&gt; (e.g. &lt;code&gt;nats&lt;/code&gt;, &lt;code&gt;rabbitmq&lt;/code&gt;, &lt;code&gt;http&lt;/code&gt;, &lt;code&gt;memory&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Transport: &lt;code&gt;go-micro.dev/v6/transport/*&lt;/code&gt; (e.g. &lt;code&gt;nats&lt;/code&gt;, default &lt;code&gt;http&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Server: &lt;code&gt;go-micro.dev/v6/server/*&lt;/code&gt; (e.g. &lt;code&gt;grpc&lt;/code&gt; for native gRPC compatibility)&lt;/li&gt;
&lt;li&gt;Client: &lt;code&gt;go-micro.dev/v6/client/*&lt;/code&gt; (e.g. &lt;code&gt;grpc&lt;/code&gt; for native gRPC compatibility)&lt;/li&gt;
&lt;li&gt;Store: &lt;code&gt;go-micro.dev/v6/store/*&lt;/code&gt; (e.g. &lt;code&gt;postgres&lt;/code&gt;, &lt;code&gt;mysql&lt;/code&gt;, &lt;code&gt;nats-js-kv&lt;/code&gt;, &lt;code&gt;memory&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Auth, Cache, etc. follow the same pattern under their respective directories.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="registry-examples"&gt;Registry Examples&lt;a class="td-heading-self-link" href="#registry-examples" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Consul:&lt;/p&gt;</description></item><item><title>Provider Conformance Matrix</title><link>https://go-micro.dev/docs/guides/provider-conformance.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/provider-conformance.html</guid><description>&lt;p&gt;Go Micro treats model providers as interchangeable pieces of the same agent
harness: services expose tools, agents reason over them, and workflows stitch the
work together. The conformance harness keeps that promise honest by running the
same deterministic services → agents → workflows scenarios against every
configured provider.&lt;/p&gt;
&lt;p&gt;The live harness is in &lt;code&gt;internal/harness/provider-conformance&lt;/code&gt;. It skips
providers without API keys by default, so it is safe to run locally, and it fails
when any configured provider breaks the shared contract.&lt;/p&gt;</description></item><item><title>Pub/Sub with NATS Broker</title><link>https://go-micro.dev/docs/examples/pubsub-nats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/examples/pubsub-nats.html</guid><description>&lt;p&gt;Use the NATS broker for pub/sub.&lt;/p&gt;
&lt;h2 id="in-code"&gt;In code&lt;a class="td-heading-self-link" href="#in-code" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/broker&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;bnats&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/broker/nats&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;bnats&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewNatsBroker&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;nats-pubsub&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Broker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// subscribe&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;broker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;events&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;broker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;received: %s&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;Body&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// publish&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;broker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;events&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;broker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="nb"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="via-environment"&gt;Via environment&lt;a class="td-heading-self-link" href="#via-environment" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Run your service with env vars set:&lt;/p&gt;</description></item><item><title>Quick Start</title><link>https://go-micro.dev/docs/guides/quickstart.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/quickstart.html</guid><description>&lt;h2 id="install"&gt;Install&lt;a class="td-heading-self-link" href="#install" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go install go-micro.dev/v5/cmd/micro@v5.16.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Use a specific version instead of &lt;code&gt;@latest&lt;/code&gt; to avoid module path conflicts. See &lt;a href="https://github.com/micro/go-micro/releases"&gt;releases&lt;/a&gt; for the latest version.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="create-your-first-service"&gt;Create Your First Service&lt;a class="td-heading-self-link" href="#create-your-first-service" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create a new service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro new helloworld
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; helloworld
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Review the generated code&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls -la
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Run locally with hot reload&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro run
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Test it&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X POST http://localhost:8080/api/helloworld/Helloworld.Call &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;name&amp;#34;: &amp;#34;World&amp;#34;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="next-steps"&gt;Next Steps&lt;a class="td-heading-self-link" href="#next-steps" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="getting-started.md"&gt;Full Tutorial&lt;/a&gt;&lt;/strong&gt; - In-depth guide&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="examples/"&gt;Examples&lt;/a&gt;&lt;/strong&gt; - Learn by example&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://pkg.go.dev/go-micro.dev/v5"&gt;API Reference&lt;/a&gt;&lt;/strong&gt; - Complete API docs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://go-micro.dev/docs/guides/deployment.html"&gt;Deployment&lt;/a&gt;&lt;/strong&gt; - Deploy to production&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="common-patterns"&gt;Common Patterns&lt;a class="td-heading-self-link" href="#common-patterns" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="rpc-service"&gt;RPC Service&lt;a class="td-heading-self-link" href="#rpc-service" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v5&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Greeter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Greeter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello &amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;New&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;greeter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Greeter&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="pubsub-event-handler"&gt;Pub/Sub Event Handler&lt;a class="td-heading-self-link" href="#pubsub-event-handler" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v5&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;New&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;subscriber&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Subscribe to events&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RegisterSubscriber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;user.created&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;UserCreatedEvent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Infof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;User created: %s&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="publishing-events"&gt;Publishing Events&lt;a class="td-heading-self-link" href="#publishing-events" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;publisher&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;user.created&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;publisher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;UserCreatedEvent&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;user@example.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="get-help"&gt;Get Help&lt;a class="td-heading-self-link" href="#get-help" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://discord.gg/jwTYuUVAGh"&gt;Discord Community&lt;/a&gt;&lt;/strong&gt; - Chat with other users&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/micro/go-micro/issues"&gt;GitHub Issues&lt;/a&gt;&lt;/strong&gt; - Report bugs or request features&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://go-micro.dev/docs/"&gt;Documentation&lt;/a&gt;&lt;/strong&gt; - Complete docs&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Quick Start</title><link>https://go-micro.dev/docs/quickstart.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/quickstart.html</guid><description>&lt;p&gt;Get up and running with go-micro in under 5 minutes.&lt;/p&gt;
&lt;h2 id="install"&gt;Install&lt;a class="td-heading-self-link" href="#install" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The recommended way is the precompiled binary — no Go toolchain required:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://go-micro.dev/install.sh &lt;span class="p"&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Or, if you have Go and prefer to build from source:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go install go-micro.dev/v6/cmd/micro@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the installer finishes but your shell cannot find &lt;code&gt;micro&lt;/code&gt;, open &lt;a href="https://go-micro.dev/docs/guides/install-troubleshooting.html"&gt;Install troubleshooting&lt;/a&gt; before creating your first service.&lt;/p&gt;
&lt;h2 id="create-your-first-service"&gt;Create Your First Service&lt;a class="td-heading-self-link" href="#create-your-first-service" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create a new service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro new helloworld
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; helloworld
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Review the generated code&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls -la
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Run locally with hot reload&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;micro run
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Test it&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X POST http://localhost:8080/api/helloworld/Helloworld.Call &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;name&amp;#34;: &amp;#34;World&amp;#34;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="next-steps"&gt;Next Steps&lt;a class="td-heading-self-link" href="#next-steps" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You now have the service half of the services → agents → workflows lifecycle running locally. Keep the on-ramp going in this order:&lt;/p&gt;</description></item><item><title>Registry</title><link>https://go-micro.dev/docs/registry.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/registry.html</guid><description>&lt;img src="https://go-micro.dev/images/generated/registry.jpg" alt="Registry" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;p&gt;The registry is responsible for service discovery in Go Micro. It allows services to register themselves and discover other services.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;a class="td-heading-self-link" href="#features" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Service registration and deregistration&lt;/li&gt;
&lt;li&gt;Service lookup&lt;/li&gt;
&lt;li&gt;Watch for changes&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;a class="td-heading-self-link" href="#implementations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro supports multiple registry backends, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MDNS (default)&lt;/li&gt;
&lt;li&gt;Consul&lt;/li&gt;
&lt;li&gt;Etcd&lt;/li&gt;
&lt;li&gt;NATS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can configure the registry when initializing your service.&lt;/p&gt;
&lt;h2 id="plugins-location"&gt;Plugins Location&lt;a class="td-heading-self-link" href="#plugins-location" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Registry plugins live in this repository under &lt;code&gt;go-micro.dev/v6/registry/&amp;lt;plugin&amp;gt;&lt;/code&gt; (e.g., &lt;code&gt;consul&lt;/code&gt;, &lt;code&gt;etcd&lt;/code&gt;, &lt;code&gt;nats&lt;/code&gt;). Import the desired package and pass it via &lt;code&gt;micro.Registry(...)&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Roadmap</title><link>https://go-micro.dev/docs/roadmap.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/roadmap.html</guid><description>&lt;p&gt;Go Micro is a framework for building &lt;strong&gt;agents and services&lt;/strong&gt; in Go. An agent is a distributed system — it discovers services, calls them, holds state, and recovers from failure — so building an agent is building a service. The roadmap has two jobs: make &lt;strong&gt;agentic development&lt;/strong&gt; excellent, and make the &lt;strong&gt;developer experience&lt;/strong&gt; around it excellent. Nothing else.&lt;/p&gt;
&lt;h2 id="where-we-are-v6"&gt;Where we are (v6)&lt;a class="td-heading-self-link" href="#where-we-are-v6" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The foundation is in place:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Services&lt;/strong&gt; — register, discover, RPC, events; every endpoint is automatically an MCP tool.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agents&lt;/strong&gt; — a model with memory and tools that manages services, with &lt;code&gt;plan&lt;/code&gt;, &lt;code&gt;delegate&lt;/code&gt;, guardrails (&lt;code&gt;MaxSteps&lt;/code&gt;, &lt;code&gt;LoopLimit&lt;/code&gt;, &lt;code&gt;ApproveTool&lt;/code&gt;), tool-execution middleware (&lt;code&gt;WrapTool&lt;/code&gt;), run metadata, checkpoint/resume, and OpenTelemetry run spans built in.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flows&lt;/strong&gt; — durable, event-driven workflows: ordered steps that checkpoint and resume after a crash.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interop&lt;/strong&gt; — the MCP gateway (services as tools) and the A2A gateway (agents as agents, both directions, including A2A streaming, push notifications, and multi-turn continuation), both generated from the registry; x402 for paid tools.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secure by default&lt;/strong&gt; — TLS verification on, state scoped per component.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="principles"&gt;Principles&lt;a class="td-heading-self-link" href="#principles" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These constrain everything below:&lt;/p&gt;</description></item><item><title>Rpc Client</title><link>https://go-micro.dev/docs/examples/learn-by-examples/rpc-client.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/examples/learn-by-examples/rpc-client.html</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;caller&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;NewRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;helloworld&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Say.Hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;John&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;Call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TODO&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;error:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>RPC Client</title><link>https://go-micro.dev/docs/examples/rpc-client.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/examples/rpc-client.html</guid><description>&lt;p&gt;Call a running service using the Go Micro client.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;caller&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;NewRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;helloworld&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Say.Hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;John&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;Call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TODO&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;error:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Search Results</title><link>https://go-micro.dev/search.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/search.html</guid><description/></item><item><title>Service Discovery with Consul</title><link>https://go-micro.dev/docs/examples/learn-by-examples/registry-consul.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/examples/learn-by-examples/registry-consul.html</guid><description>&lt;h2 id="in-code"&gt;In code&lt;a class="td-heading-self-link" href="#in-code" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/registry/consul&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;reg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;consul&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewConsulRegistry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;consul-registry&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Registry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reg&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="via-environment"&gt;Via environment&lt;a class="td-heading-self-link" href="#via-environment" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Run your service with env vars set:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;MICRO_REGISTRY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;consul &lt;span class="nv"&gt;MICRO_REGISTRY_ADDRESS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;127.0.0.1:8500 go run main.go
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Service Discovery with Consul</title><link>https://go-micro.dev/docs/examples/registry-consul.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/examples/registry-consul.html</guid><description>&lt;p&gt;Use Consul as the service registry.&lt;/p&gt;
&lt;h2 id="in-code"&gt;In code&lt;a class="td-heading-self-link" href="#in-code" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/registry/consul&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;reg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;consul&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewConsulRegistry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;consul-registry&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Registry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reg&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="via-environment"&gt;Via environment&lt;a class="td-heading-self-link" href="#via-environment" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Run your service with env vars set:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;MICRO_REGISTRY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;consul &lt;span class="nv"&gt;MICRO_REGISTRY_ADDRESS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;127.0.0.1:8500 go run main.go
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>State with Postgres Store</title><link>https://go-micro.dev/docs/examples/store-postgres.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/examples/store-postgres.html</guid><description>&lt;p&gt;Use the Postgres store for persistent key/value state.&lt;/p&gt;
&lt;h2 id="in-code"&gt;In code&lt;a class="td-heading-self-link" href="#in-code" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/store&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;postgres&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/store/postgres&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;st&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;postgres&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewStore&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;postgres-store&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;st&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Record&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="nb"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;bar&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;recs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;value:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;recs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="via-environment"&gt;Via environment&lt;a class="td-heading-self-link" href="#via-environment" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Run your service with env vars set:&lt;/p&gt;</description></item><item><title>Store</title><link>https://go-micro.dev/docs/store.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/store.html</guid><description>&lt;p&gt;The store provides a pluggable interface for data storage in Go Micro.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;a class="td-heading-self-link" href="#features" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Key-value storage&lt;/li&gt;
&lt;li&gt;Multiple backend support&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;a class="td-heading-self-link" href="#implementations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Supported stores include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memory (default)&lt;/li&gt;
&lt;li&gt;File (&lt;code&gt;go-micro.dev/v6/store/file&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;MySQL (&lt;code&gt;go-micro.dev/v6/store/mysql&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Postgres (&lt;code&gt;go-micro.dev/v6/store/postgres&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;NATS JetStream KV (&lt;code&gt;go-micro.dev/v6/store/nats-js-kv&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plugins are scoped under &lt;code&gt;go-micro.dev/v6/store/&amp;lt;plugin&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Configure the store in code or via environment variables.&lt;/p&gt;
&lt;h2 id="example-usage"&gt;Example Usage&lt;a class="td-heading-self-link" href="#example-usage" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s how to use the store in your Go Micro service:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/store&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;store-example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Write a record&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Record&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="nb"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;bar&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)});&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Read a record&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;recs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Read value: %s&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;recs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configure-a-specific-store-in-code"&gt;Configure a specific store in code&lt;a class="td-heading-self-link" href="#configure-a-specific-store-in-code" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Postgres:&lt;/p&gt;</description></item><item><title>Store Postgres</title><link>https://go-micro.dev/docs/examples/learn-by-examples/store-postgres.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/examples/learn-by-examples/store-postgres.html</guid><description>&lt;h2 id="in-code"&gt;In code&lt;a class="td-heading-self-link" href="#in-code" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/store&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;postgres&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/store/postgres&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;st&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;postgres&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewStore&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;postgres-store&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;st&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Record&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="nb"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;bar&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;recs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;value:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;recs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="via-environment"&gt;Via environment&lt;a class="td-heading-self-link" href="#via-environment" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Run your service with env vars set:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;MICRO_STORE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postgres &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;MICRO_STORE_ADDRESS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postgres://user:pass@127.0.0.1:5432/postgres &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;MICRO_STORE_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;micro &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;MICRO_STORE_TABLE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;micro &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go run main.go
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Summary: Reflection Removal Evaluation</title><link>https://go-micro.dev/docs/reflection-evaluation-summary.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/reflection-evaluation-summary.html</guid><description>&lt;p&gt;&lt;strong&gt;Issue&lt;/strong&gt;: [FEATURE] Remove reflect&lt;br&gt;
&lt;strong&gt;Date&lt;/strong&gt;: 2026-02-03&lt;br&gt;
&lt;strong&gt;Status&lt;/strong&gt;: EVALUATION COMPLETE - RECOMMENDATION AGAINST REMOVAL&lt;/p&gt;
&lt;h2 id="executive-summary"&gt;Executive Summary&lt;a class="td-heading-self-link" href="#executive-summary" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;After comprehensive analysis of go-micro&amp;rsquo;s reflection usage and comparison with livekit/psrpc (the referenced example), &lt;strong&gt;we recommend AGAINST removing reflection from go-micro&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="key-findings"&gt;Key Findings&lt;a class="td-heading-self-link" href="#key-findings" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="1-reflection-is-fundamental-to-go-micros-architecture"&gt;1. Reflection is Fundamental to go-micro&amp;rsquo;s Architecture&lt;a class="td-heading-self-link" href="#1-reflection-is-fundamental-to-go-micros-architecture" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Reflection enables go-micro&amp;rsquo;s core value proposition:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Simple, idiomatic Go - no proto files, no code generation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;MyService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;MyService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SayHello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello &amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;MyService&lt;/span&gt;&lt;span class="p"&gt;{}))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This &lt;strong&gt;requires&lt;/strong&gt; reflection. There is no way to achieve this simplicity with generics or code generation.&lt;/p&gt;</description></item><item><title>Support</title><link>https://go-micro.dev/support.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/support.html</guid><description>&lt;section id="td-cover-block-0" class="row td-hero-block td-cover-block--height-td-below-navbar js-td-cover -bg-dark-blue bg-pattern" &gt;
 &lt;div class="col-12"&gt;
 &lt;div class="container td-overlay__inner"&gt;
 &lt;div class="text-center"&gt;
 &lt;div class="pt-3 lead"&gt;
&lt;h1 class="display-3 fw-bold mb-3"&gt;Support&lt;/h1&gt;
&lt;p class="lead text-gray-custom mb-4 col-8 offset-2"&gt;
 Community help is free.&lt;/br&gt;Commercial support and consulting keep the project moving — and keep your team unblocked in production.
&lt;/p&gt;
&lt;div class="td-cta-buttons my-4"&gt;
 &lt;a class="btn btn-go btn-lg d-inline-flex align-items-center gap-2" href="https://github.com/sponsors/asim"&gt;Become a sponsor&lt;/a&gt;
 &lt;a class="btn btn-outline-go btn-lg d-inline-flex align-items-center gap-2" href="https://github.com/micro/go-micro/issues/new?template=commercial_support.md"&gt;Talk to us&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/section&gt;
&lt;div&gt;&lt;a id="td-block-1" class="td-anchor-no-extra-offset"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;section class="row td-box td-box--dark-blue td-box--height-auto bg-pattern py-5"&gt;
 &lt;div class="col container"&gt;
 &lt;div class="row"&gt;
&lt;div class="text-center mb-4"&gt;
 &lt;h2 class="fw-bold"&gt;Choose your level&lt;/h2&gt;
 &lt;p class="text-gray-custom col-10 offset-1"&gt;From free community help to hands-on engagements. Recurring amounts are set on GitHub Sponsors; support and consulting are scoped per engagement.&lt;/p&gt;</description></item><item><title>Testing Micro Services</title><link>https://go-micro.dev/docs/guides/testing.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/testing.html</guid><description>&lt;p&gt;The &lt;code&gt;testing&lt;/code&gt; package provides utilities for testing micro services in isolation.&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;a class="td-heading-self-link" href="#quick-start" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;testing&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/test&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;TestGreeter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;testing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewHarness&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;defer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;greeter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;Register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;GreeterHandler&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;HelloResponse&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;GreeterHandler.Hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;HelloRequest&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;World&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello World&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Errorf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;expected &amp;#39;Hello World&amp;#39;, got &amp;#39;%s&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="how-it-works"&gt;How It Works&lt;a class="td-heading-self-link" href="#how-it-works" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The harness creates isolated instances of:&lt;/p&gt;</description></item><item><title>The Agent Harness</title><link>https://go-micro.dev/docs/guides/agent-harness.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/agent-harness.html</guid><description>&lt;p&gt;The first wave of agent frameworks solved one problem: put a model in a loop with
some tools. The harder problem is &lt;strong&gt;operating&lt;/strong&gt; that loop — and that&amp;rsquo;s what a
harness is.&lt;/p&gt;
&lt;p&gt;A harness is the runtime around an agent:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;strong&gt;tools&lt;/strong&gt; it can call,&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;memory&lt;/strong&gt; it keeps,&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;guardrails&lt;/strong&gt; that bound it,&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;workflows&lt;/strong&gt; that trigger and structure it,&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;state&lt;/strong&gt; that survives a restart,&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;observability&lt;/strong&gt; to see what it did,&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;services&lt;/strong&gt; it depends on,&lt;/li&gt;
&lt;li&gt;and the &lt;strong&gt;protocols&lt;/strong&gt; other agents use to reach it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Go Micro&amp;rsquo;s bet is that this runtime is the one you already deploy. An agent is a
service with a model inside; the harness is the distributed-systems machinery
services already have. So you don&amp;rsquo;t bolt a separate orchestration product onto
your stack — the harness &lt;em&gt;is&lt;/em&gt; the stack.&lt;/p&gt;</description></item><item><title>TLS Security Migration Guide</title><link>https://go-micro.dev/docs/security_migration.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/security_migration.html</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro v6 verifies TLS certificates by default. This guide is for teams
upgrading from v5, where TLS verification was disabled by default for backward
compatibility.&lt;/p&gt;
&lt;h2 id="current-status-v6"&gt;Current Status (v6)&lt;a class="td-heading-self-link" href="#current-status-v6" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Default Behavior&lt;/strong&gt;: TLS certificate verification is &lt;strong&gt;enabled&lt;/strong&gt; by default
(&lt;code&gt;InsecureSkipVerify: false&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What changed from v5&lt;/strong&gt;: v5 allowed &lt;code&gt;MICRO_TLS_SECURE=true&lt;/code&gt; to opt into
certificate verification. In v6, secure verification is the default and
&lt;code&gt;MICRO_TLS_SECURE&lt;/code&gt; is no longer used.&lt;/p&gt;</description></item><item><title>TLS Security Update - Important Information</title><link>https://go-micro.dev/docs/tls_security_update.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/tls_security_update.html</guid><description>&lt;h2 id="what-changed"&gt;What Changed&lt;a class="td-heading-self-link" href="#what-changed" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Go Micro v6 verifies TLS certificates by default. This completes the v5 security
migration where verification was opt-in.&lt;/p&gt;
&lt;h2 id="current-behavior-v6x"&gt;Current Behavior (v6.x)&lt;a class="td-heading-self-link" href="#current-behavior-v6x" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: TLS certificate verification is &lt;strong&gt;enabled&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MICRO_TLS_SECURE&lt;/code&gt; was a v5 opt-in flag and is no longer used.&lt;/li&gt;
&lt;li&gt;For local development with untrusted self-signed certificates, opt out
explicitly with &lt;code&gt;MICRO_TLS_INSECURE=true&lt;/code&gt; or an explicit insecure TLS config.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="production-recommendation"&gt;Production Recommendation&lt;a class="td-heading-self-link" href="#production-recommendation" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For production deployments:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Use CA-signed certificates or distribute your private CA to every host.&lt;/li&gt;
&lt;li&gt;Remove old &lt;code&gt;MICRO_TLS_SECURE&lt;/code&gt; settings from v5-era manifests.&lt;/li&gt;
&lt;li&gt;Do not set &lt;code&gt;MICRO_TLS_INSECURE=true&lt;/code&gt; in production.&lt;/li&gt;
&lt;li&gt;Consider service mesh mTLS (Istio, Linkerd) if certificate lifecycle should be
managed outside the application.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="migration-timeline"&gt;Migration Timeline&lt;a class="td-heading-self-link" href="#migration-timeline" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;v5.x&lt;/strong&gt;: Insecure by default, opt-in security via &lt;code&gt;MICRO_TLS_SECURE=true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;v6.x current&lt;/strong&gt;: Secure by default; use &lt;code&gt;MICRO_TLS_INSECURE=true&lt;/code&gt; only for an
explicit development opt-out.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="documentation"&gt;Documentation&lt;a class="td-heading-self-link" href="#documentation" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;See &lt;a href="https://go-micro.dev/docs/security_migration.html"&gt;SECURITY_MIGRATION.md&lt;/a&gt; for the detailed migration
guide.&lt;/p&gt;</description></item><item><title>Transport</title><link>https://go-micro.dev/docs/transport.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/transport.html</guid><description>&lt;img src="https://go-micro.dev/images/generated/transport.jpg" alt="Transport" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" /&gt;
&lt;p&gt;The transport layer is responsible for communication between services.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;a class="td-heading-self-link" href="#features" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pluggable transport implementations&lt;/li&gt;
&lt;li&gt;Secure and efficient communication&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="implementations"&gt;Implementations&lt;a class="td-heading-self-link" href="#implementations" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Supported transports include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP (default)&lt;/li&gt;
&lt;li&gt;NATS (&lt;code&gt;go-micro.dev/v6/transport/nats&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;gRPC (&lt;code&gt;go-micro.dev/v6/transport/grpc&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Memory (&lt;code&gt;go-micro.dev/v6/transport/memory&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="important-transport-vs-native-grpc"&gt;Important: Transport vs Native gRPC&lt;a class="td-heading-self-link" href="#important-transport-vs-native-grpc" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The gRPC &lt;strong&gt;transport&lt;/strong&gt; uses gRPC as an underlying communication protocol, similar to how NATS or RabbitMQ might be used. It does &lt;strong&gt;not&lt;/strong&gt; provide native gRPC compatibility with tools like &lt;code&gt;grpcurl&lt;/code&gt; or standard gRPC clients generated by &lt;code&gt;protoc&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Transport Nats</title><link>https://go-micro.dev/docs/examples/learn-by-examples/transport-nats.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/examples/learn-by-examples/transport-nats.html</guid><description>&lt;h2 id="in-code"&gt;In code&lt;a class="td-heading-self-link" href="#in-code" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tnats&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;go-micro.dev/v6/transport/nats&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tnats&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewTransport&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;nats-transport&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;micro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Transport&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;svc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="via-environment"&gt;Via environment&lt;a class="td-heading-self-link" href="#via-environment" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Run your service with env vars set:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;MICRO_TRANSPORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nats &lt;span class="nv"&gt;MICRO_TRANSPORT_ADDRESS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nats://127.0.0.1:4222 go run main.go
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Website information</title><link>https://go-micro.dev/site.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/site.html</guid><description>&lt;p&gt;Site built with &lt;a href="https://github.com/google/docsy/releases/v0.14.4-dev"&gt;&lt;span class="badge bg-primary text-bg-primary fs-6"&gt;Docsy
v0.14.4-dev &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="build-information"&gt;Build information&lt;a class="td-heading-self-link" href="#build-information" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Netlify build information:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Attribute&lt;/th&gt;
					&lt;th&gt;Value&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Netlify built&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Deploy context&lt;/td&gt;
					&lt;td&gt;local&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;script&gt;
document.addEventListener("DOMContentLoaded", function() {
 var options = { hour: '2-digit', hour12: false, minute: '2-digit', timeZoneName: 'short' };
 var buildDate = new Date("2026-07-29T10:30:31Z");
 document.getElementById("local-time").innerText = buildDate.toLocaleString(undefined, options);
});
&lt;/script&gt;</description></item><item><title>Your First Agent</title><link>https://go-micro.dev/docs/guides/your-first-agent.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-micro.dev/docs/guides/your-first-agent.html</guid><description>&lt;p&gt;This walkthrough builds the smallest useful Go Micro agent path: one service
with typed endpoints, one agent scoped to that service, and one CLI conversation
that proves the agent can use the service as a tool. It is the 0→1 version of
the services → agents → workflows lifecycle: build capability first, add
intelligence on top, then keep a clear path toward flows when the work needs to
run on events or schedules.&lt;/p&gt;</description></item></channel></rss>