IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

YoyoGo基于ASP.NET Core设计的Golang实现

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

YoyoGo

YoyoGo 是一个用 Go 编写的简单,轻便,快速的 微服务框架,目前已实现了Web框架的能力,但是底层设计已支持多种服务架构。
95_1.png

Github

https://github.com/yoyofx/yoyogo

特色

  • 漂亮又快速的路由器
  • 中间件支持 (handler func & custom middleware)
  • 对 REST API 友好
  • 支持 MVC 模式
  • 受到许多出色的 Go Web 框架的启发

框架安装

go get github.com/yoyofx/yoyogo

安装依赖 (由于某些原因国内下载不了依赖)

go version < 1.13

window 下在 cmd 中执行:
set GO111MODULE=on
set  GOPROXY=https://goproxy.cn

linux  下执行:
export GO111MODULE=on
export GOPROXY=https://goproxy.cn

go version >= 1.13

go env -w GOPROXY=https://goproxy.cn,direct

简单的例子

package main
import ...

func main() {
    YoyoGo.CreateDefaultBuilder(func(router Router.IRouterBuilder) {
        router.GET("/info",func (ctx *Context.HttpContext) {    // 支持Group方式
            ctx.JSON(200, Context.M{"info": "ok"})
        })
    }).Build().Run()       //默认端口号 :8080
}

95_2.png

实现进度

标准功能

  • [X] 打印Logo和日志(YoyoGo)
  • [X] 统一程序输入参数和环境变量 (YoyoGo)
  • [X] 简单路由器绑定句柄功能
  • [X] HttpContext 上下文封装(请求,响应)
  • [X] 静态文件端点(静态文件服务器)
  • [X] JSON 序列化结构(Context.M)
  • [X] 获取请求文件并保存
  • [X] 获取请求数据(form-data,x-www-form-urlencoded,Json ,XML,Protobuf 等)
  • [X] Http 请求的绑定模型(Url, From,JSON,XML,Protobuf)

响应渲染功能

  • [X] Render Interface
  • [X] JSON Render
  • [X] JSONP Render
  • [X] Indented Json Render
  • [X] Secure Json Render
  • [X] Ascii Json Render
  • [X] Pure Json Render
  • [X] Binary Data Render
  • [X] TEXT
  • [X] Protobuf
  • [X] MessagePack
  • [X] XML
  • [X] YAML
  • [X] File
  • [X] Image
  • [X] Template
  • [X] Auto formater Render

中间件

  • [X] Logger
  • [X] StaticFile
  • [X] Router Middleware
  • [ ] Session
  • [ ] CORS
  • [ ] GZip
  • [X] Binding
  • [ ] Binding Valateion

路由

  • [x] GET,POST,HEAD,PUT,DELETE 方法支持
  • [x] 路由解析树与表达式支持
  • [x] RouteData路由数据 (/api/:version/) 与 Binding的集成
  • [x] 路由组功能
  • [ ] MVC默认模板功能
  • [ ] 路由过滤器 Filter

MVC

  • [x] 路由请求触发Controller&Action
  • [X] Action方法参数绑定
  • [ ] 内部对象的DI化
  • [ ] 关键对象的参数传递

Dependency injection

  • [X] 抽象集成第三方DI框架
  • [X] MVC模式集成
  • [X] 框架级的DI支持功能

扩展

  • [ ] 配置
  • [ ] WebSocket
  • [ ] JWT
  • [ ] swagger
  • [ ] GRpc
  • [ ] OAuth2
  • [ ] Prometheus
  • [ ] 安全

进阶范例

package main
import ...

func main() {
    webHost := CreateCustomWebHostBuilder().Build()
    webHost.Run()
}

// 自定义HostBuilder并支持 MVC 和 自动参数绑定功能,简单情况也可以直接使用CreateDefaultBuilder 。
func CreateCustomBuilder() *Abstractions.HostBuilder {
    return YoyoGo.NewWebHostBuilder().
        SetEnvironment(Context.Prod).
        UseFastHttp().
        //UseServer(YoyoGo.DefaultHttps(":8080", "./Certificate/server.pem", "./Certificate/server.key")).
        Configure(func(app *YoyoGo.WebApplicationBuilder) {
            app.UseStatic("Static")
            app.UseEndpoints(registerEndpointRouterConfig)
            app.UseMvc(func(builder *Mvc.ControllerBuilder) {
                builder.AddController(contollers.NewUserController)
            })
        }).
        ConfigureServices(func(serviceCollection *DependencyInjection.ServiceCollection) {
            serviceCollection.AddTransientByImplements(models.NewUserAction, new(models.IUserAction))
        }).
        OnApplicationLifeEvent(getApplicationLifeEvent)
}

//region endpoint 路由绑定函数
func registerEndpoints(router Router.IRouterBuilder) {
    router.GET("/error", func(ctx *Context.HttpContext) {
        panic("http get error")
    })

    //POST 请求: /info/:id ?q1=abc&username=123
    router.POST("/info/:id", func (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})
    })

    // 路由组功能实现绑定 GET 请求:  /v1/api/info
    router.Group("/v1/api", func(router *Router.RouterGroup) {
        router.GET("/info", func (ctx *Context.HttpContext) {
            ctx.JSON(200, Std.M{"info": "ok"})
        })
    })

    // GET 请求: HttpContext.RequiredServices获取IOC对象
    router.GET("/ioc", func (ctx *Context.HttpContext) {
        var userAction models.IUserAction
        _ = ctx.RequiredServices.GetService(&userAction)
        ctx.JSON(200, Std.M{"info": "ok " + userAction.Login("zhang")})
    })
}

//endregion

//region 请求对象
type UserInfo struct {
    UserName string `param:"username"`
    Number   string `param:"q1"`
    Id       string `param:"id"`
}

// ----------------------------------------- MVC 定义 ------------------------------------------------------

// 定义Controller
type UserController struct {
    *Controller.ApiController
    userAction models.IUserAction    // IOC 对象参数
}

// 构造器依赖注入
func NewUserController(userAction models.IUserAction) *UserController {
    return &UserController{userAction: userAction}
}

// 请求对象的参数化绑定
type RegiserRequest struct {
    Controller.RequestParam
    UserName string `param:"username"`
    Password string `param:"password"`
}

// Register函数自动绑定参数
func (this *UserController) Register(ctx *Context.HttpContext, request *RegiserRequest) ActionResult.IActionResult {
    result := Controller.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"))
}


// Web程序的开始与停止事件
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
        }
    }
}


文章永久链接:https://tech.souyunku.com/?p=37837


Warning: A non-numeric value encountered in /data/wangzhan/tech.souyunku.com.wp/wp-content/themes/dux/functions-theme.php on line 1154
赞(63) 打赏



未经允许不得转载:搜云库技术团队 » YoyoGo基于ASP.NET Core设计的Golang实现

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码
IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

评论 抢沙发

大前端WP主题 更专业 更方便

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏

微信扫一扫打赏


Fatal error: Uncaught Exception: Cache directory not writable. Comet Cache needs this directory please: `/data/wangzhan/tech.souyunku.com.wp/wp-content/cache/comet-cache/cache/https/tech-souyunku-com/index.q`. Set permissions to `755` or higher; `777` might be needed in some cases. in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php:367 Stack trace: #0 [internal function]: WebSharks\CometCache\Classes\AdvancedCache->outputBufferCallbackHandler() #1 /data/wangzhan/tech.souyunku.com.wp/wp-includes/functions.php(5109): ob_end_flush() #2 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(303): wp_ob_end_flush_all() #3 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters() #4 /data/wangzhan/tech.souyunku.com.wp/wp-includes/plugin.php(470): WP_Hook->do_action() #5 /data/wangzhan/tech.souyunku.com.wp/wp-includes/load.php(1097): do_action() #6 [internal function]: shutdown_action_hook() #7 {main} thrown in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php on line 367