YoyoGo is a simple, light and fast Web framework written in Go.
- Pretty and fast router
- Middleware Support
- Friendly to REST API
- No regexp or reflect
- Inspired by many excellent Go Web framework
I will be glad if you contribute to this library. I don't know much English, so contributing to the documentation is very meaningful to me. If you found a bug and create an issue, it will be fixed in one day.
go get github.com/maxzhang1985/yoyogo
package main
import ...
func main() {
//webHost := YoyoGo.CreateDefaultWebHostBuilder(os.Args,RouterConfigFunc).Build()
webHost := CreateCustomWebHostBuilder(os.Args).Build()
webHost.Run()
}
//* Create the builder of Web host
func CreateCustomWebHostBuilder(args []string) *YoyoGo.HostBuilder {
return YoyoGo.NewWebHostBuilder().
UseFastHttp(). //default port:8080
//UseServer(YoyoGo.DefaultHttps(":8080", "./Certificate/server.pem", "./Certificate/server.key")).
Configure(func(app *YoyoGo.ApplicationBuilder) {
app.SetEnvironment(Context.Prod) //set prod to environment
app.UseStatic("Static")
}).
UseRouter(RouterConfigFunc).
ConfigureServices(func(serviceCollection *DependencyInjection.ServiceCollection) {
serviceCollection.AddTransientByImplements(models.NewUserAction, new(models.IUserAction))
}).
OnApplicationLifeEvent(fireApplicationLifeEvent)
}
//*/
//region router config function
func RouterConfigFunc(router Router.IRouterBuilder) {
router.GET("/error", func(ctx *Context.HttpContext) {
panic("http get error")
})
router.POST("/info/:id", PostInfo)
router.Group("/v1/api", func(router *Router.RouterGroup) {
router.GET("/info", GetInfo)
})
router.GET("/info", GetInfo)
router.GET("/ioc", GetInfoByIOC)
}
//endregion
//region Http Request Methods
type UserInfo struct {
UserName string `param:"username"`
Number string `param:"q1"`
Id string `param:"id"`
}
//HttpGet request: /info or /v1/api/info
//bind UserInfo for id,q1,username
func GetInfo(ctx *Context.HttpContext) {
ctx.JSON(200, Std.M{"info": "ok"})
}
func GetInfoByIOC(ctx *Context.HttpContext) {
var userAction models.IUserAction
_ = ctx.RequiredServices.GetService(&userAction)
ctx.JSON(200, Std.M{"info": "ok " + userAction.Login("zhang")})
}
//HttpPost request: /info/:id ?q1=abc&username=123
func PostInfo(ctx *Context.HttpContext) {
qs_q1 := ctx.Query("q1")
pd_name := ctx.Param("username")
userInfo := &UserInfo{}
_ = ctx.Bind(userInfo)
strResult := fmt.Sprintf("Name:%s , Q1:%s , bind: %s", pd_name, qs_q1, userInfo)
ctx.JSON(200, Std.M{"info": "hello world", "result": strResult})
}
func fireApplicationLifeEvent(life *YoyoGo.ApplicationLife) {
printDataEvent := func(event YoyoGo.ApplicationEvent) {
fmt.Printf("[yoyogo] Topic: %s; Event: %v\n", event.Topic, event.Data)
}
for {
select {
case ev := <-life.ApplicationStarted:
go printDataEvent(ev)
case ev := <-life.ApplicationStopped:
go printDataEvent(ev)
break
}
}
}
- Print Logo (YoyoGo)
- Unified program entry (YoyoGo)
- Simple router binded handle func
- HttpContext (request,response)
- Static File EndPoint(Static File Server)
- JSON Serialization Struct (Std.M)
- Get Request File And Save
- Unite Get Post Data Away (form-data , x-www-form-urlencoded)
- Binding Model for Http Request ( From, JSON )
- Render Interface
- JSON Render
- JSONP Render
- Indented Json Render
- Secure Json Render
- Ascii Json Render
- Pure Json Render
- Binary Data Render
- TEXT
- Protobuf
- MessagePack
- XML
- YAML
- File
- Image
- Template
- Auto formater Render
- Logger
- StaticFile
- Router
- Router Middleware
- Session
- CORS
- Binding
- GZip
- GET、POST、HEAD、PUT、DELETE Method Support
- Router Tree
- Router Expression
- RouteData (var)
- Router Support Struct Refect Func Binded.
- Router Support Prefix and Group Such as "/api/v1/endpoint"
- Router Filter
- Controller Router And Router Tempalte (Default)
- Dependency injection Framework
- Dependency injection Integration
- swagger
- configtion
- WebSocket
- GRpc
- JWT
- OAuth2
- Prometheus
- Secure
- JWT