Gone首先是一个轻量的,基于Golang的,依赖注入框架,灵感来源于Java中的Spring Framework;其次,Gone框架中包含了一系列内置组件,通过这些组件提供一整套Web开发方案,提供服务配置、日志追踪、服务调用、数据库访问、消息中间件等微服务常用能力。

文档

使用示例

下面使用Gone来编写一个Web服务吧!

package main

import (
    "fmt"
    "github.com/gone-io/gone"
    "github.com/gone-io/gone/goner"
)

// 实现一个Goner,什么是Goner? => https://goner.fun/zh/guide/core-concept.html#goner-%E9%80%9D%E8%80%85
type controller struct {
    gone.Flag //goner 标记,匿名嵌入后,一个结构体就实现了Goner
    gone.RouteGroup `gone:"gone-gin-router"` //注入根路由
}

// 实现 Mount 方法,挂载路由;框架会自动执行该方法
func (ctr *controller) Mount() gone.GinMountError {

    // 定义请求结构体
    type Req struct {
        Msg string `json:"msg"`
    }

    //注册 `POST /hello` 的 处理函数
    ctr.POST("/hello", func(in struct {
        to  string `gone:"http,query"` //注入http请求Query参数To
        req *Req   `gone:"http,body"`  //注入http请求Body
    }) any {
        return fmt.Sprintf("to %s msg is: %s", in.to, in.req.Msg)
    })

    return nil
}

func main() {
    //启动服务
    gone.Serve(func(cemetery gone.Cemetery) error {
        // 调用框架内置组件,加载gin框架
        _ = goner.GinPriest(cemetery)

        //将 一个controller类型的Goner埋葬到墓园
        //埋葬是什么意思? => https://goner.fun/zh/guide/core-concept.html#bury-%E5%9F%8B%E8%91%AC
        //墓园是什么意思? => https://goner.fun/zh/guide/core-concept.html#cemetery-%E5%A2%93%E5%9B%AD
        cemetery.Bury(&controller{})
        return nil
    })
}

运行上面代码:go run main.go,程序将监听8080端口,使用curl测试:

curl -X POST 'http://localhost:8080/hello' \
    -H 'Content-Type: application/json' \
    --data-raw '{"msg": "你好呀?"}'

结果如下:

{"code":0,"data":"to  msg is: 你好呀?"}