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: 你好呀?"}