Go Micro 创建 Web

Go Micro 是一个插件化的 RPC 开发框架,用于使用 Go 语言快速构建微服务。

我们可以使用 Go Micro 的 micro 工具创建 Web 服务。例如,创建 hello Web 服务:

micro new --type=web hello

以下是 micro 创建的 Web 服务:

package main

import (
    "github.com/micro/go-micro/util/log"
    "github.com/micro/go-micro/web"
    "net/http"
)

func main() {
    // 创建一个新的服务,服务名为 go.micro.srv.hello
    service := web.NewService(
        // 服务名:go.micro.api.user
        web.Name("go.micro.api.user"),
        // 元信息:使用 http 协议
        web.Metadata(map[string]string{"protocol": "http"}),
        // 服务地址:端口号为 8081
        web.Address(":8081"),
    )

    // 通过命令行参数或者插件初始化服务
    service.Init()

    // /user 路由处理函数
    service.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte(`{"msg":"user api"}`))
    })

    // 运行服务
    if err := service.Run(); err != nil {
        log.Fatal(err)
    }
}

注意:不要忘记补全 web.Metadata(map[string]string{"protocol": "http"}) 。

我们可以使用 curl 测试结果:

curl http://localhost:8081/user

或者直接在浏览器中,输入 http://localhost:8081/user。输出结果为:

{"msg":"user api"})

我们还可以集成 gin 作为路由,有关 gin 的使用可以参照 gin框架 教程。

package main

import (
    "github.com/gin-gonic/gin"
    "github.com/micro/go-micro/util/log"
    "github.com/micro/go-micro/web"
    "net/http"
)

func main() {
    // 创建 gin 路由
    r := gin.Default()
    r.GET("/user", func(c *gin.Context) {
        c.JSON(http.StatusOK, map[string]string{
            "msg": "user api",
        })
    })

    // 创建一个新的服务,服务名为 go.micro.srv.hello
    service := web.NewService(
        // 服务名:go.micro.api.user
        web.Name("go.micro.api.user"),
        // 元信息:http 协议
        web.Metadata(map[string]string{"protocol": "http"}),
        // 服务地址
        web.Address(":8081"),
        // 使用gin路由
        web.Handler(r),
    )

    // 通过命令行参数或者插件初始化服务
    service.Init()

    // 运行服务
    if err := service.Run(); err != nil {
        log.Fatal(err)
    }
}        

Go Micro 是一个插件化的 RPC 开发框架,用于使用 Go 语言快速构建微服务。测试 Go Micro Web 服务可以使用 curl,比如测试 http://localhost:8081/user: ...