• 88、go框架有哪些-转载——2020年07月30日12:56:43


    88、go框架有哪些-转载

    2020年07月30日12:26:56

    简介

    Go 是一个快速增长的开源编程语言,用于构建简单、快速和可靠的软件。点这里看有哪些大公司在使用Go语言来构建他们的服务。

    本文提供了所有必要的信息,以帮助开发人员了解使用Go语言开发Web应用程序的最佳选项。。

    本文包含了最详细的框架比较,通过尽可能多的角度(人气,社区支持,内置功能等)来比较最知名的几个Web 框架。

    Beego: 一个Go语言下开源的,高性能Web框架

    * https://github.com/astaxie/beego
    * https://beego.me

    Buffalo: 一个Go语言下快速Web开发框架

    * https://github.com/gobuffalo/buffalo
    * https://gobuffalo.io

    Echo: 一个高性能,极简的Web框架

    * https://github.com/labstack/echo
    * [https://echo.labstack.com

    Gin: 一个Go语言写的HTTP Web框架。它提供了Martini风格的API并有更好的性能。

    * https://github.com/gin-gonic/gin
    * https://gin-gonic.github.io/gin

    Iris: 目前发展最快的Go Web框架。提供完整的MVC功能并且面向未来。

    * https://github.com/kataras/iris
    * https://iris-go.com

    Revel: 一个高生产率,全栈Go语言的Web框架。

    * https://github.com/revel/revel
    * https://revel.github.io

    几个知名的 Go 语言 Web 框架并不是真正意义上的框架,也就是说: EchoGinBuffalo 并不是真正意义上的 Web 框架(因为没有完备支持所有功能)

    但是大部分的 Go 社区认为它们是的,因此这些框架也可以和 IrisBeegoRevel 做比较。所以,我们有义务将这几个框架(EchoGinBuffalo)也列在这个表中。

    以上所有这些框架,除了 BeegoRevel 之外,都可以适配任意 net/http 中间件。其中一部分框架可以轻松地做适配,另外一些可能就需要额外的努力 [即使这里的痛苦不是一定的]。

    技术性词汇

    路由:命名的路径参数和通配符

    可以处理动态的路径。

    命名的路径参数例子:

    "/user/{username}" 匹配 "/user/me","/user/speedwheel" 等等
    

    上面路径参数 username 的值分别是 "me""speedwheel"

    通配符的例子:

    "/user/{path *wildcard}" 匹配
    "/user/some/path/here",
    "/user/this/is/a/dynamic/multi/level/path" 等等
    

    上面的路径参数 path 对应的分别是 "some/path/here""this/is/a/dynamic/multi/level/path"

    Iris 也支持一个叫 macros 的功能,它可以被表示为 /user/{username:string} 或者 /user/{username:int min(1)}

    路由:正则表达式

    过滤动态的路径。

    例如:

    "/user/{id ^[0-9]$}" 能匹配 "/user/42" ,但不会匹配 "/user/somestring"
    

    这里的路径参数 id 的值为 42

    路由:分组

    通过共用逻辑或中间件来处理有共同前缀的路径组。

    例如:

    myGroup := Group("/user", userAuthenticationMiddleware)
    myGroup.Handle("GET", "/", userHandler)
    myGroup.Handle("GET", "/profile", userProfileHandler)
    myGroup.Handle("GET", "/signup", getUserSignupForm)
    
    • /user
    • /user/profile
    • /user/signup

    你甚至可以从一个组中创建子分组:

    myGroup.Group("/messages", optionalUserMessagesMiddleware)
    myGroup.Handle("GET', "/{id}", getMessageByID)
    
    • /user/messages/{id}

    路由:上述所有规则相结合而没有冲突

    这是一个高级且有用的的功能,我们许多人都希望路由模块或 Web 框架能支持这点,但目前,在 Go 语言框架方面,只有 Iris 能支持这一功能。

    这意味着类似如 /{path *wildcard}/user/{username}/user/static 以及 /user/{path *wildcard} 等路径都可以在同一个路由中通过静态路径(/user/static)或通配符(/{path *wildcard})来正确匹配。

    路由:自定义 HTTP 错误

    指可以自行处理请求错误的情况。 Http 的错误状态码均 >=400 ,比如 NotFound 404,请求的资源不存在。

    例如:

    OnErrorCode(404, myNotFoundHandler)
    

    上述的大多数 Web 框架只支持 404405500 错误状态的处理,但是例如 Iris,Beego 和 Revel 等框架,它们完备支持 HTTP 错误状态码,甚至支持 any error 任意错误。( any error -- 任意错误,只有 Iris 能够支持)。

    100% 兼容 net/http

    这意味著:

    • 这些框架能够让你直接获取 *http.Requesthttp.ResponseWriter 的所有相关信息。
    • 各框架提供各自相应处理 net/http 请求的方法。

    中间件生态系统

    框架会为你提供一个完整的引擎来定义流程、全局、单个或一组路由,而不需要你自己用不同的中间件来封装每一部分的处理器。框架会提供比如 Use(中间件)、Done(中间件) 等函数。

    类 Sinatra 的 API 设计(译者注:Sinatra 是一门基于 Ruby 的领域专属语言

    可以在运行时中注入代码来处理特定的 HTTP 方法 (以及路径参数)。

    例如:

    .Get or GET("/path", gethandler)
    .Post or POST("/path", postHandler)
    .Put or PUT("/path", putHandler) and etc.
    

    服务器程序:默认启用 HTTPS

    框架的服务器支持注册及自动更新 SSL 证书来管理新传入的 SSL/TLS 连接 (https)。 最著名的默认启用 https 的供应商是 letsencrypt

    服务器程序:平滑关闭(Gracefully Shutdown)

    当按下 CTRL + C 关闭你的终端应用程序时,服务器将等待 (一定的等待时间)其他的连接完成相关任务或触发一个自定义事件来做清理工作(比如:关闭数据库),最后平滑地停止服务。

    服务器程序:多重监听

    框架的服务器支持自定义的 net.Listener 或可以启动一个有多个 http 服务和地址的 Web 应用。

    完全支持 HTTP/2

    框架可以很好地支持处理 https 请求的 HTTP/2 协议,并且支持服务器 Push 功能。

    子域名

    你可以直接在你的 Web 应用中注入子域名的路径。

    辅助功能(secondary) 意味着这个功能并不被这个框架原生支持,但是你仍旧可以通过启用多个 http 服务器来实现。这样做的缺点在于:主程序和子域名程序之间并不是连通的,默认情况下,它们不能共享逻辑。

    会话(Sessions)

    支持 http sessions,且可以在自定义的处理程序中使用 sessions。

    • 有一些 Web 框架支持后台数据库来储存 sessions,以便在服务器重启之后仍旧能获得持久的 sessions。
    • Buffalo 使用 gorilla 的 sessions 库,它比其他框架的实现略微慢了一点。

    例如:

    func setValue(context http_context){
        s := Sessions.New(http_context)
        s.Set("key", "my value")
    }
    
    func getValue(context http_context){
        s := Sessions.New(http_context)
        myValue := s.Get("key")
    }
    
    func logoutHandler(context http_context){
        Sessions.Destroy(http_context)
    }
    

    Wiki: https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP_session

    网络套接字(Websockets)

    框架支持 websocket 通信协议。不同的框架对于这点有各自不同的实现方式。

    你应该通过它们的例子来看看哪个适合你。我的一个同事,在试过了上述所有框架中的 websocket 功能之后告诉我:Iris 实现了最多的 websocket 特性,并且提供了相对更容易使用的 API 。

    Wiki: https://en.wikipedia.org/wiki/WebSocket

    程序内嵌对视图(又名模版)的支持

    通常情况下,你必须根据 Web 应用的可执行文件一一对应地转换模版文件。内嵌到应用中意味着这个框架集成了 go-bindata ,因此在最终的可执行文件中可以以 []byte 的形式将模版包含进来。

    什么是视图引擎

    框架支持模版加载、自定义及内建模版功能,以此来节省我们的开发时间。

    视图引擎:STD

    框架支持标准的 html/template 解析器加载模版。

    视图引擎:Pug

    框架支持 Pug 解析器加载模版。

    视图引擎:Django

    框架支持 Django 解析器加载模版。

    视图引擎:Handlebars

    框架支持 Handlebars 解析器加载模版。

    视图引擎:Amber

    框架支持 Amber 解析器加载模版。

    渲染:Markdown, JSON, JSONP, XML...

    框架提供一个简单的方法来发送和自定义各种内容类型的响应。

    MVC

    Model–view–controller (MVC) 模型是一种用于在计算机上实现用户界面的软件架构模式,它将一个应用程序分为互相关联的三部分。这样做的目的是为了:将信息的内部处理逻辑、信息呈现给用户以及从用户获取信息三者分离。MVC 设计模式将这三个组件解耦合,从而实现高效的代码复用和并行开发。

    • Iris 支持完备的 MVC 功能, 可以在运行时中注入。
    • Beego 仅支持方法和数据模型的匹配,可以在运行时中注入。
    • Revel 支持方法,路径和数据模型的匹配,只可以通过生成器注入(生成器是另外一个不同的软件用于构建你的 Web 应用)。

    Wiki: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

    转载链接:

    https://studygolang.com/articles/11897?fr=sidebar

    END

    2020年07月30日12:41:51

  • 相关阅读:
    滑动窗口最大值
    uber.zap性能验证
    【spring框架】AOP的Annotation实现(下)
    Spring Boot实战:Spring Boot使用AOP的正确姿势 Spring AOP术语 通知 连接点 切点 切面 引入 织入
    Git极简教程(3)branch级别的操作,合并分支 拉取最新代码git pull 包含( git fetch origin 和 git merge origin/master )
    当使用git branch r是当分支有很多的时候出现end 使用:q可以退出
    Java异常类型及处理 Throwable在异常类层次结构的顶层,在AOP中用到
    Git极简教程(2)remote级别的操作,remote(多个分支的集合体)我们叫做origin,origin/master一般是主分支。origin/dev 开发分支,origin/zhangsan 开发者张三的分支 都应该复制master,基于master进行开发迭代
    spring aop获取方法上与类上的注解
    自定义的异常类,用instanceof判断类型错误
  • 原文地址:https://www.cnblogs.com/oneapple/p/13403131.html
Copyright © 2020-2023  润新知