这篇就是使用 go-micro 的 http 创建一个可以调用接口的微服务HTTP
<!--more-->
## 源码地址
* [源码地址](https://github.com/CleverBamboo/go-micro-examples)
* [爱租房](https://github.com/CleverBamboo/renting)
## 系列文章
* [微服务实战Go Micro v3 系列(一)- 基础篇](https://cleverbamboo.github.io/2021/04/27/GO/微服务实战Go-Micro-v3-系列(一)-基础篇/#more)
* [微服务实战Go Micro v3 系列(二)- HelloWorld](https://cleverbamboo.github.io/2021/04/27/GO/微服务实战Go-Micro-v3-系列(二)-HelloWorld/#more)
* [微服务实战Go-Micro v3 系列(三)- 启动HTTP服务](https://cleverbamboo.github.io/2021/04/28/GO/微服务实战Go-Micro-v3-系列(三)-启动HTTP服务/#more)
* [微服务实战Go Micro v3 系列(四)- 事件驱动(Pub/Sub)](https://cleverbamboo.github.io/2021/05/12/GO/微服务实战Go-Micro-v3-系列(四)-事件驱动-Pub-Sub/#more)
* [微服务实战Go Micro v3 系列(五)- 注册和配置中心](https://cleverbamboo.github.io/2021/06/02/GO/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%AE%9E%E6%88%98Go-Micro-v3-%E7%B3%BB%E5%88%97%EF%BC%88%E4%BA%94%EF%BC%89-%E6%B3%A8%E5%86%8C%E5%92%8C%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83/#more)
* [微服务实战Go Micro v3 系列(六)- 综合篇(爱租房项目)](https://cleverbamboo.github.io/2021/06/08/GO/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%AE%9E%E6%88%98Go-Micro-v3-%E7%B3%BB%E5%88%97%EF%BC%88%E5%85%AD%EF%BC%89-%E7%BB%BC%E5%90%88%E7%AF%87%EF%BC%88%E7%88%B1%E7%A7%9F%E6%88%BF%E9%A1%B9%E7%9B%AE%EF%BC%89/#more)
## httpServer
这里我们使用 gin 框架结合 go-micro 来进行编写
首先 创建一个 http 目录,并在该目录下创建 main.go,写入下面代码
```go
package main
import (
httpServer "github.com/asim/go-micro/plugins/server/http/v3"
"github.com/asim/go-micro/v3"
"github.com/asim/go-micro/v3/logger"
"github.com/asim/go-micro/v3/registry"
"github.com/asim/go-micro/v3/server"
"github.com/gin-gonic/gin"
"go-micro-examples/http/handler"
)
const (
ServerName = "go.micro.web.DemoHTTP" // server name
)
func main() {
// Create service
srv := httpServer.NewServer(
server.Name(ServerName),
server.Address(":8080"),
)
gin.SetMode(gin.ReleaseMode)
router := gin.New()
router.Use(gin.Recovery())
// register router
demo := handler.NewDemo()
demo.InitRouter(router)
hd := srv.NewHandler(router)
if err := srv.Handle(hd); err != nil {
logger.Fatal(err)
}
// Create service
service := micro.NewService(
micro.Server(srv),
micro.Registry(registry.NewRegistry()),
)
service.Init()
// Run service
if err := service.Run(); err != nil {
logger.Fatal(err)
}
}
```
## 使用 gin 进行初始化路由
在 http 目录创建 handler\handler.go
```go
package handler
import (
"context"
"github.com/asim/go-micro/v3"
"github.com/gin-gonic/gin"
helloworld "go-micro-examples/helloworld/proto"
)
//demo
type demo struct{}
func NewDemo() *demo {
return &demo{}
}
func (a *demo) InitRouter(router *gin.Engine) {
router.POST("/demo", a.demo)
}
func (a *demo) demo(c *gin.Context) {
// create a service
service := micro.NewService()
service.Init()
client := helloworld.NewHelloworldService("go.micro.srv.HelloWorld", service.Client())
rsp, err := client.Call(context.Background(), &helloworld.Request{
Name: "world!",
})
if err != nil {
c.JSON(200, gin.H{"code": 500, "msg": err.Error()})
return
}
c.JSON(200, gin.H{"code": 200, "msg": rsp.Msg})
}
```
## postman测试
在启动两个微服务之后,如下图:
![](https://z3.ax1x.com/2021/04/28/gPyeDP.png)
使用 postman 进行测试,调用成功并返回 "hello world!"
![](https://z3.ax1x.com/2021/04/28/gPyd5F.png)
有疑问加站长微信联系(非本文作者)