go_micro框架的安装和使用 - 详解
2025-11-11 10:40 tlnshuju 阅读(0) 评论(0) 收藏 举报新版与旧版有所不同,新版不再有--type参数
1、命令行方式的安装和使用:
go install github.com/micro/micro/v5@latest
检测版本:
micro --version
micro version 5.0.0-dev
使用方法,用new命令创建服务项目
micro new xtsh2002

2、在go项目中安装
新建好go项目之后,项目下就有了go.mod文件
go get "go-micro.dev/v5"

注意:
在新版的 Micro 中,micro new 命令确实移除了 --type 参数,不再通过命令行参数区分服务类型(如 srv 或 web)。但可以通过项目结构调整和服务实现方式来区分服务和 Web 应用,核心思路如下:
1. 基础概念:服务(srv)与 Web 应用的本质区别
根据 Micro 的设计理念:
服务(srv):指后端 RPC 服务,专注于核心业务逻辑,通常通过 gRPC 协议通信,默认命名空间为 go.micro.srv。
Web 应用:专注于提供 HTML 内容或 HTTP 接口,通过 micro web 组件反向代理,默认命名空间为 go.micro.web。
新版通过代码实现和配置来体现这种区别,而非命令行参数。
2. 创建服务(srv)的默认方式
使用 micro new 命令创建的项目默认是服务(srv) 结构,生成的代码已包含 RPC 服务的基础框架:
micro new myservice # 默认创建 RPC 服务
生成的关键文件:
proto/myservice.proto:定义 RPC 接口(如 Call 方法)。
handler/myservice.go:实现 RPC 接口的处理逻辑。
main.go:通过 micro.NewService() 初始化服务,注册 RPC 处理器。
这类服务启动后,会以 RPC 形式提供服务,可被其他服务通过 Micro 客户端调用。
3. 创建 Web 应用的调整方式
若需创建 Web 应用(如提供 HTTP 接口或 HTML 页面),需在默认项目结构的基础上进行以下调整:
(1)修改服务命名空间
Web 应用需使用 go.micro.web 命名空间,在 main.go 中指定服务名称时体现:
// main.go
service := micro.NewService(
micro.Name("go.micro.web.mywebapp"), // 明确使用 web 命名空间
micro.Version("latest"),
)
micro web 组件会根据该命名空间识别并反向代理 Web 服务。
(2)添加 HTTP 处理器
在代码中引入 HTTP 处理逻辑(如使用标准库 net/http 或框架),并将 HTTP 处理器注册到 Micro 服务中:
// main.go
import (
"net/http"
"github.com/micro/micro/v3/service/web"
)
func main() {
// 初始化 Web 服务(基于 micro web 组件)
srv := web.NewService(
web.Name("go.micro.web.mywebapp"),
)
// 注册 HTTP 路由
srv.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello Web Service"))
})
// 启动服务
if err := srv.Run(); err != nil {
log.Fatal(err)
}
}
(3)通过 micro web 代理访问
启动 Web 应用后,需通过 micro web 组件作为反向代理访问:
# 启动 Web 代理(默认监听 8082 端口)
micro web
# 访问 Web 服务(路径映射规则:/服务名/路由)
curl http://localhost:8082/mywebapp/
4. 核心区别总结
| 类型 | 命名空间 | 通信协议 | 核心组件 | 用途 |
|---|---|---|---|---|
| 服务(srv) | go.micro.srv | gRPC/RPC | micro.NewService() | 后端业务逻辑、RPC 接口 |
| Web 应用 | go.micro.web | HTTP/WebSocket | web.NewService() | 前端页面、HTTP 接口 |
通过上述方式,即使没有 --type 参数,也能清晰地区分和实现服务与 Web 应用。核心是利用命名空间和组件选择(micro.Service vs web.Service)来适配不同场景。
浙公网安备 33010602011771号