YoyoGo — простой, лёгкий и быстрый веб-фреймворк на Go
YoyoGo — это простой, лёгкий и быстрый Web framework, написанный на языке Go.
Особенности:
Установка:
go get github.com/yoyofx/yoyogo
Простой пример:
package main
import ...
func main() {
WebApplication.CreateDefaultBuilder(func(rb router.IRouterBuilder) {
rb.GET("/info",func (ctx *context.HttpContext) { // 支持Group方式
ctx.JSON(200, context.H{"info": "ok"})
})
}).Build().Run() //默认端口号 :8080
}
Задачи:
Расширенный пример:
package main
import ...
func main() {
webHost := CreateCustomWebHostBuilder().Build()
webHost.Run()
}
func CreateCustomBuilder() *abstractions.HostBuilder {
configuration := abstractions.NewConfigurationBuilder().
AddEnvironment().
AddYamlFile("config").Build()
return WebApplication.NewWebHostBuilder().
UseConfiguration(configuration).
Configure(func(app *WebApplication.WebApplicationBuilder) {
app.UseMiddleware(middlewares.NewCORS())
//WebApplication.UseMiddleware(middlewares.NewRequestTracker())
app.UseStaticAssets()
app.UseEndpoints(registerEndpointRouterConfig)
app.UseMvc(func(builder *mvc.ControllerBuilder) {
//builder.AddViews(&view.Option{Path: "./static/templates"})
builder.AddViewsByConfig()
builder.AddController(contollers.NewUserController)
builder.AddFilter("/v1/user/info", &contollers.TestActionFilter{})
})
}).
ConfigureServices(func(serviceCollection *dependencyinjection.ServiceCollection) {
``` Данный текст написан на языке Go.
serviceCollection.AddTransientByImplements(models.NewUserAction, new(models.IUserAction))
//eureka.UseServiceDiscovery(serviceCollection)
//consul.UseServiceDiscovery(serviceCollection)
nacos.UseServiceDiscovery(serviceCollection)).
OnApplicationLifeEvent(getApplicationLifeEvent)
}
//region endpoint router config function
func registerEndpoints(rb router.IRouterBuilder) {
Endpoints.UseHealth(rb)
Endpoints.UseViz(rb)
Endpoints.UsePrometheus(rb)
Endpoints.UsePprof(rb)
Endpoints.UseJwt(rb)
rb.GET("/error", func(ctx *context.HttpContext) {
panic("http get error")
})
rb.POST("/info/:id", PostInfo)
rb.Group("/v1/api", func(rg *router.RouterGroup) {
rg.GET("/info", GetInfo)
})
rb.GET("/info", GetInfo)
rb.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, context.H{"info": "ok"})
}
func GetInfoByIOC(ctx *context.HttpContext) {
var userAction models.IUserAction
_ = ctx.RequiredServices.GetService(&userAction)
ctx.JSON(200, context.H{"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, context.H{"info": "hello world", "result": strResult})
}
func fireApplicationLifeEvent(life *abstractions.ApplicationLife) {
printDataEvent := func(event abstractions.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
}
}
}
// mvc
type UserController struct {
*mvc.ApiController
userAction models.IUserAction // IOC
}
// ctor for ioc
func NewUserController(userAction models.IUserAction) *UserController {
return &UserController{userAction: userAction}
}
// reuqest param binder
type RegiserRequest struct {
mvc.RequestBody
UserName string `param:"username"`
Password string `param:"password"`
}
// auto bind action param by ioc
func (this *UserController) Register(ctx *context.HttpContext, request *RegiserRequest) actionresult.IActionResult {
result := Mvc.ApiResult{Success: true, Message: "ok", Data: request}
return actionresult.Json{Data: result}
}
// use userAction interface by ioc
func (this *UserController) GetInfo() controller.ApiResult {
return this.OK(this.userAction.Login("zhang"))
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )