首页 > 其他分享 >Go 布道者框架beego的Router 功能详解

Go 布道者框架beego的Router 功能详解

时间:2023-10-18 21:31:42浏览次数:41  
标签:beego 框架 布道者 controllers Beego Go Router

Beego 是一个用于构建 Web 应用程序和后端服务的 Go 语言框架。它提供了一整套功能,包括路由、模型、视图、会话管理等。

0 go框架beego现在被淘汰了吗?

2016年提出的这个问题,由于当时自己刚入门学习go,就想找一个快速入门的框架学习使用,所以提出了这个很无脑的问题,在此,也向框架作者表示深深的歉意!

经过两年多的深入学习和理解,越来越发现各类go框架只是一个工具,在不同的需求或者场景下选用最适合的,才是最正确的。

对比beego和gin都有不同使用场景,beego相对go语言的风格来说可能显得有些臃肿,但也不影响它依然是go MVC较好的解决方案。

目前好像框架作者没有太多的精力打理这个框架了,beego已经凉凉。

1 Beego框架的地位

国内Go语言社区第一个框架,Beego作者作为国内Go语言最早布道者,对go语言在中国普及作出不可磨灭贡献,先不说这框架优秀还是差劲,就凭这点,我们就应该对这个框架和作者respect。

beego是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。

2 设计思想

听说Beego作者是从PHP跨入到GO语言行列,所以当初设计Beego的时候还带着强烈的PHP设计思想,从MVC架构来看,有点像是参考PHP的优秀框架Laravel,至少从1.0版本来看,似乎没有融入Go语言的设计思想。但是文档上面写来源于tornado、sinatra 和 flask 这三个框架就不得而知。

Beego框架从刚开始设计就是冲着大而全思想,完全不像Gin这样追求性能而精致的路由级别的框架,它集成了ORM、VIEW、业务封装还有一系列的工具模块,所以对初学者,特别是从PHP跨入GO的程序员们眼前一亮的感觉,3天看GO语法,3天看Beego框架,然后周末休息一天,周一就可以CRUD业务写的飞快了,老板喜笑颜开连连点赞,这不是国内一些中小型互联网公司的缩影。

3 不足之处

不可否认的是,Beego有很多不足之处,里面很多代码质量也是被很多人所诟病,毕竟是第一代作品很多设计理念还比较青涩,现在2.0版本也在慢慢改进。但是你会发现动动嘴永远都比动动手来的轻松,我是写不出这个东西,但是你写的这个东西就是垃圾。作为一个优秀的程序员,你最好的辩论武器就是代码,Show Me Your Code!你觉得它不够好你可以去改善它去贡献它,或者你可以写个更好的去替代它,而不是一味的为了喷而喷!

Go语言目前有很多优秀的框架,Beego早已不是优先选择了,即便它有这样那样的问题,但是不妨碍它影响了一代Go语言人。我最后想说,用什么框架或者不用框架,是看你对业务的理解和对Go理解程序的一个认知过程,希望大家不要把时间浪费在这种口舌上面,有时间多去贡献Go的生态。

beego.Router 是 Beego 框架中的路由器功能。路由器用于将 HTTP 请求映射到相应的处理函数,可根据 URL 和请求方法执行不同的逻辑。

4 使用示例

基本路由

beego.Router("/", &controllers.MainController{})

根路径("/")映射到名为 MainController 的控制器。

带有参数的路由

beego.Router("/user/:username", &controllers.UserController{})

在这个例子中,:username 是一个参数,可以在处理函数中被访问。

RESTful 路由

beego.Router("/api/user", &controllers.UserController{}, "get:GetAllUsers")
beego.Router("/api/user/:id", &controllers.UserController{}, "get:GetUser")
beego.Router("/api/user", &controllers.UserController{}, "post:CreateUser")
beego.Router("/api/user/:id", &controllers.UserController{}, "put:UpdateUser")
beego.Router("/api/user/:id", &controllers.UserController{}, "delete:DeleteUser")

在这个例子中,使用了 RESTful 风格的路由,映射到不同的 HTTP 方法和处理函数。

标签:beego,框架,布道者,controllers,Beego,Go,Router
From: https://blog.51cto.com/JavaEdge/7923486

相关文章

  • Go - Avoiding Test Fixtures in Performance Tests
    Problem: Youwanttocustomizetheperformanceteststoavoidbenchmarkingtestfixtures.Solution: Youcanstart,stop,andresetthebenchmarktimersusingtheStartTimer,StopTimer,andResetTimer,respectively.Thiswillallowyoutheflexibilityt......
  • Go - Changing the Timing for Running Performance Tests
    Problem: Youwanttorunperformancetestsforaspecificdurationoraspecificnumberofiterations.Solution: Youcanincreasetheminimumdurationthebenchmarksshouldrunorincreasethenumberofiterationsusingthe-benchtimeflag. Torunthis......
  • RunnerGo 支持UI自动化的测试平台
    RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块,覆盖了整个产品测试周期。RunnerGoUI自动化基于Selenium浏览器自动化方案构建,内嵌高度可复用的测试脚本,测试团队无需复杂的代码编写即可开展低代码的自动化测试。以一条简单的搜索场景为例,本文介绍Runn......
  • Go - Testing a Web Application or a Web Service
    Problem: Youwanttodounittestingonawebapplicationorawebservice.Solution: Usethehttptest.NewRecorderfunctiontocreateanhttptest.ResponseRecorderthatcanbeusedtorecordwhat’sbeenwrittentothehttp.ResponseWriter.Thiscanthenb......
  • Go - Generating Random Test Inputs for Tests
    Problem: Youwanttogeneraterandomtestdataforrunningyourtestfunctions. Solution: Usefuzzing,whichisanautomatedtestingtechniquetogeneraterandomtestdataforyourtestfunctions. Fuzzing,orfuzztesting,isanautomatedtestingte......
  • RunnerGo 支持UI自动化的测试平台
    RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块,覆盖了整个产品测试周期。RunnerGoUI自动化基于Selenium浏览器自动化方案构建,内嵌高度可复用的测试脚本,测试团队无需复杂的代码编写即可开展低代码的自动化测试。 以一条简单的搜索场景为例,本文......
  • ZEGO音视频服务的高可用架构设计与运营
      前言:ZEGO即构科技作为一家实时音视频的提供商,系统稳定性直接影响用户的主观体验,如何保障服务高可用且用户体验最优是行业面临的挑战,本文结合实际业务场景进行思考,介绍 ZEGO即构在高可用架构和运营上所进行的探索和实践,希望对大家能有所帮助或启发。一、背景与挑战全......
  • 2023-10-18:用go语言,给定一个数组arr,长度为n,表示有0~n-1号设备, arr[i]表示i号设备的型
    2023-10-18:用go语言,给定一个数组arr,长度为n,表示有0~n-1号设备,arr[i]表示i号设备的型号,型号的种类从0~k-1,一共k种型号,给定一个k*k的矩阵map,来表示型号之间的兼容情况,map[a][b]==1,表示a型号兼容b型号,map[a][b]==0,表示a型号不兼容b型号,兼容关系是有向图,也就是a型号兼容b型号......
  • Django修改数据库数据的两种方式
    部分代码展示:fromdjango.shortcutsimportrender,HttpResponse,redirectfromapp01importmodelsdefedit_user(request):#获取url问好后面的参数edit_id=request.GET.get('user_id')#查询当前用户想要编写的数据对象edit_obj=models.User.ob......
  • Go - Creating Subtests to Have Finer Control Over Groups of Test Cases
    Problem: Youwanttocreatesubtestswithinatestfunctiontohavefinercontrolovertestcases.Solution: Usethet.Runfunctiontocreatesubtestswithinatestfunction.Subtestsextendtheflexibilityoftestfunctionstoanotherleveldown. When......