go-micro 快速入门指南:5 分钟创建并运行你的第一个微服务
【免费下载链接】go-microA Go agent harness and service framework项目地址: https://gitcode.com/gh_mirrors/go/go-micro
导读:本文是 go-micro(一个 Go 语言 agent harness 与服务框架)的官方快速入门手册的完整实战版。你将学会在 5 分钟内完成
microCLI 的安装、用一条命令脚手架出第一个服务、在本地以热重载方式运行并通过 HTTP 调用验证,随后沿着"服务 → Agent → 工作流"的上坡路径(on-ramp)走向 Agent 开发,同时掌握 RPC 服务、事件发布/订阅三大核心编码模式。
一、安装microCLI
go-micro 提供了两条官方安装路径,按你的环境任选其一。注意两条路径的适用前提不同:二进制安装器不需要 Go 工具链即可完成安装,而源码安装要求本机已有 Go。
方式一:预编译二进制(推荐,无需 Go 工具链)
curl -fsSL https://go-micro.dev/install.sh | sh该方式直接下载已发布的micro可执行文件,安装阶段完全不依赖 Go。需要留意的是:虽然安装本身不需要 Go,但后续执行micro run构建并运行生成的服务时,仍然需要本机装有 Go 工具链(Go 1.24 或更新版本)。
方式二:Go 源码安装
go install go-micro.dev/v6/cmd/micro@latest该方式适用于本机已有 Go 的环境,二进制会被安装到$(go env GOPATH)/bin目录下。CLI 的入口实现位于仓库 cmd/micro/main.go:它通过cmd.Init以micro为命令名初始化,并链接了cmd/defaults与a2a、ai、chat、cli、flow、gateway、inspect、loop、mcp、run等全部插件,因此--registry etcd、--broker nats、--profile nats这类插件旗标开箱即用。
安装后的验证
如果安装器执行完毕但 shell 找不到micro命令,请务必在创建第一个服务之前完成排障。先确认命令解析与版本:
command -v micro micro --version常见问题与修复见下表(完整版参考仓库文档 internal/website/content/en/docs/guides/install-troubleshooting.md):
| 症状 | 检查项 | 修复方法 |
|---|---|---|
micro: command not found | command -v micro | 把安装目录加入PATH后打开新终端重试。常见目录:export PATH="$HOME/.micro/bin:$PATH"(二进制安装器)或export PATH="$(go env GOPATH)/bin:$PATH"(go install) |
micro run找不到 Go | go version | 安装 Go 1.24 或更新版本 |
| 网关端口被占用 | lsof -i :8080 | 停止占用端口的进程,或改用其他地址运行 |
| Agent 运行被 provider-key 错误阻塞 | micro agent preflight | 先停留在无密钥路径上:运行micro agent demo,再跟随无密钥 first-agent 指南 |
二、创建你的第一个服务
安装完成后,用两条命令完成服务创建与本地启动:
# 创建新服务 micro new helloworld cd helloworld # 查看生成的代码 ls -la # 本地运行(默认开启热重载) micro run # 测试服务 curl -X POST http://localhost:8080/api/helloworld/Helloworld.Call \ -H "Content-Type: application/json" \ -d '{"name": "World"}'预期输出形如{"msg":"Hello World"}。这里的micro new、micro run、API 网关的运行时行为都来自仓库源码,值得逐一看懂:
micro new到底生成了什么
从 cmd/micro/cli/new/new.go 的Run实现可以确认:
- 默认采用反射式(protoless)模板:生成的
main.go、handler/helloworld.go通过反射注册 handler,不需要protoc工具链即可构建运行。对应文件集合为main.go、handler/、Makefile、README.md、.gitignore、go.mod。 - 生成过程自动执行
go mod tidy解析依赖,随后打印项目结构树与下一步指引。 - 生成服务与 CLI 保持同版本:
microVersion()会从构建信息中读取 CLI 所使用的 go-micro 版本写入生成的go.mod,确保生成的服务依赖与你正在运行的框架版本一致(本地 dev 构建则回退到latest)。
micro new还提供若干实用旗标(源码见new.go中的 Flags 定义):
| 旗标 | 作用 |
|---|---|
--template | 服务模板:default、crud、pubsub、api(后三者基于 proto) |
--proto | 使用 Protocol Buffers(需要protoc);默认反射式无需 protoc |
--no-mcp | 禁用生成代码中的 MCP 网关集成 |
--prompt "..." | 用 AI 设计并生成多个服务(需要--provider与 API key,或ANTHROPIC_API_KEY等环境变量) |
如果选择--proto而本机缺少protoc、protoc-gen-go、protoc-gen-micro任一工具,micro new不会报晦涩错误,而是打印缺失清单与安装命令(go install go-micro.dev/v6/cmd/protoc-gen-micro@latest等)。
micro run的本地运行时
micro run启动的是本地开发 harness。从 cmd/micro/run/run.go 的源码看,热重载默认开启(watchEnabled := !c.Bool("no-watch"),可用--no-watch关闭),内置文件监听器(watcher)会在源码变化时自动重建并重启服务。
根据 cmd/micro/README.md 对本地运行时的说明,micro run在localhost:8080上同时暴露:
- API 网关:
http://localhost:8080/api/{service}/{method},即上面 curl 调用的入口 - Web 仪表盘:
http://localhost:8080 - Agent Playground:
http://localhost:8080/agent - API Explorer:
http://localhost:8080/api - MCP Tools:
http://localhost:8080/mcp/tools - 健康检查:
http://localhost:8080/health
在另一个终端里,还可以用 CLI 直接调用服务方法进行验证:
micro call helloworld Helloworld.Call '{"name":"World"}'三、核心编码模式
在正式进入 Agent 开发之前,掌握服务端最基本的三种编码模式。它们是 go-micro 框架的骨架,也是后续"服务即工具"(service-as-tool)能力的基础。
1. RPC 服务
package main import ( "context" "go-micro.dev/v6" ) type Greeter struct{} func (g *Greeter) Hello(ctx context.Context, req *Request, rsp *Response) error { rsp.Message = "Hello " + req.Name return nil } func main() { service := micro.NewService("greeter") service.Handle(new(Greeter)) service.Run() }要点解析:
micro.NewService("greeter")创建并命名一个服务,它会自动完成注册中心(默认内存 registry)、RPC 编解码、请求路由等组件的初始化。service.Handle(new(Greeter))将 handler 注册到服务;在默认(反射式)模式下,方法名、参数结构都会成为可被 RPC 调用的端点,无需额外写 proto 定义。- 在完整可运行示例中,
Request/Response通常由 proto 文件生成(见 examples/hello-world/main.go);而仓库的 examples/first-agent 演示了纯 Go struct + 反射式注册的写法。
2. Pub/Sub 事件订阅
import ( "context" "go-micro.dev/v6" ) func main() { service := micro.NewService("subscriber") // 订阅事件 micro.RegisterSubscriber("user.created", service.Server(), func(ctx context.Context, event *UserCreatedEvent) error { // 处理事件 return nil }, ) service.Run() }micro.RegisterSubscriber把处理器绑定到主题user.created上,运行时会通过 broker(默认内存 broker)把事件投递给匹配的订阅者。
3. 发布事件
publisher := micro.NewEvent("user.created", client) publisher.Publish(ctx, &UserCreatedEvent{ Email: "user@example.com", })micro.NewEvent创建事件发布器,Publish将消息发往 broker 的指定主题。服务之间通过"主题 + 事件结构"解耦:生产者不感知订阅者,订阅者也不感知生产者,这正是 go-micro 事件驱动架构的典型形态。
四、下一步:services → agents → workflows 上坡路径
micro run跑通之后,你已经拥有了"服务"这一半生命周期。官方推荐按以下顺序继续上坡(完整编号清单见原文档,此处全部转换为仓库内可直达路径):
- 先排障安装:Install troubleshooting—— 验证二进制安装器或
go install、PATH、micro --version与无密钥 smoke 路径。 micro agent demo—— 从已安装的 CLI 打印 provider-free 的 first-agent 演示命令与后续文档步骤。micro agent quickcheck(或micro agent debug)—— 当"脚手架 → 运行 → 聊天 → 检查"流程卡住时,打印简短恢复地图。micro examples—— 按复制粘贴顺序打印维护中的可运行示例。micro zero-to-hero—— 打印维护中的"一条命令、无密钥"生命周期 harness 与可运行示例。- Examples 导航索引—— 从一张地图里挑选最小的无密钥 first-agent、维护中的0→hero 支持参考(examples/support)以及后续互操作示例。
- 最小 first-agent 示例—— 在配置 provider 密钥之前,先用 mock 模型跑一个无密钥 Agent。
- 无密钥 first-agent 实录—— 在配置 provider 密钥之前,用 mock 模型运行一个实用的支持型 Agent。
- 你的第一个 Agent—— 把这个服务改造成可被 Agent 调用的工具,与它聊天,并掌握
micro agent preflight→micro run→micro chat循环。 - Agent 调试—— 当 Agent 行为异常时,用
micro inspect agent <name>检查服务注册、工具调用、运行历史、记忆、provider 故障与流程交接。 - 0→hero 参考—— 走完经过 CI 验证的"脚手架 → 运行 → 聊天 → 检查 → 部署 dry-run"路径,证明服务、Agent 与工作流三者协同。
完成 first-agent 路径后,可以继续分支到:
- 完整教程—— 深入指南
- 示例—— 按服务、Agent、工作流映射的可运行示例
- 部署—— 生产环境部署
这些 CLI 命令的实现依据
上述micro agent demo、micro agent quickcheck、micro examples、micro zero-to-hero、micro docs等命令均有真实实现:
- Agent 子命令定义在 cmd/micro/cli/agent/agent.go(含
demo、quickcheck、preflight、doctor、list、history等子命令)。 micro examples、micro zero-to-hero、micro docs实现在 cmd/micro/cli/cli.go,各自打印维护中的示例导航、无密钥生命周期演示命令与文档路径;micro new、micro gen proto、micro services、micro call、micro describe也注册在同一个文件中。micro agent preflight与micro agent doctor:前者在micro run之前做只读检查(Go 版本、micro二进制、provider 密钥、默认本地网关端口,全程不联系 provider),失败项会给出Fix:与Next:指引;后者在micro run已运行但聊天/网关/注册/inspect 异常时做运行后恢复检查(实现见 cmd/micro/cli/agent/preflight.go 与 cmd/micro/cli/agent/doctor.go)。
把服务变成 Agent 工具
在 your-first-agent 指南 中,一个服务端点同时充当 RPC 方法、仪表盘/API 动作、MCP 工具与 Agent 工具——不需要为 Agent 编写第二套集成层。关键写法:
agent := micro.NewAgent("assistant", micro.AgentServices("task"), micro.AgentPrompt("You help manage tasks. Use the task service before answering."), micro.AgentProvider("anthropic"), micro.AgentAPIKey(os.Getenv("ANTHROPIC_API_KEY")), ) go agent.Run() service.Run()要点:micro.AgentServices("task")把 Agent 的作用域限定到task服务;方法上的文档注释与@example标签会变成工具描述,供模型正确选择task.Create、task.List,因此给端点写注释不是可有可无的装饰。服务调用本身不需要模型密钥,只有 Agent 需要推理选工具时才需要 provider 密钥。
五、常见故障与帮助资源
快速排障速查
| 症状 | 检查项 | 处理建议 |
|---|---|---|
micro: command not found | command -v micro | 将安装目录加入PATH并重开终端 |
micro run无法找到 Go | go version | 安装 Go 1.24+ |
| 网关端口 8080 被占用 | lsof -i :8080 | 停止占用进程或换地址运行 |
| Agent 无法访问服务 | micro agent list | 确认创建 Agent 时使用了micro.AgentServices(...) |
| 工具调用字段错误 | 方法注释 | 补全文档注释与@example标签 |
| 纯服务调用正常但聊天失败 | 环境变量 | 确认 provider key 已导出到运行micro run的 shell |
| 需要无密钥参考路径 | make harness | 在 go-micro 仓库根目录运行,用 mock provider 走完服务→Agent→工作流生命周期 |
帮助与文档资源
- 仓库内示例导航:examples/INDEX.md与 examples/README.md
- 部署指南:internal/website/content/en/docs/deployment/
- Agent 调试指南:debugging-agents.md
- 仓库贡献者可用
make install-smoke在不联网的情况下针对本地构建跑一遍安装器 seam;make harness则用 mock 模型验证完整的 services → agents → workflows 生命周期(对应 harness 脚本位于 internal/harness/zero-to-hero-ci/run.sh)。
至此,你已经完成了 go-micro 的安装、首个服务的创建与调用,并掌握了 RPC 与事件两大核心模式。接下来沿着上坡路径构建你的第一个服务型 Agent,就是水到渠成的事了。
【免费下载链接】go-microA Go agent harness and service framework项目地址: https://gitcode.com/gh_mirrors/go/go-micro
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考