当前位置: 首页 > news >正文

jsp网站开发实例视频深圳网站建设系统

jsp网站开发实例视频,深圳网站建设系统,佛山大良网站建设招聘,layui做的网站苦学golang半年,写了一款web服务器 文章目录 苦学golang半年,写了一款web服务器example 项目地址:https://github.com/fengyuan-liang/jet-web-fasthttp 可以的话,请star支持一下🙂 苦学golang半年,写了一款…

苦学golang半年,写了一款web服务器

文章目录

  • 苦学golang半年,写了一款web服务器
    • example

项目地址:https://github.com/fengyuan-liang/jet-web-fasthttp
可以的话,请star支持一下🙂

苦学golang半年,写了一款web服务器,里面包含笔者各种工程实践,大佬勿喷😊

为什么不使用Gin,而要自己开发一款web服务器呢?其实gin已经非常好了👍,笔者这里主要是想要把自己开发中的工程实践提炼出来,打造出更加顺手的兵器🏹️(现在还只是个玩具🪀,大家看个乐子就行)

那么在使用Gin中有哪些痛点呢?

  • 繁琐的路由表,在Gin中必须写路由表来映射路由,再写对应的func(ctx *gin.Context ),总感觉多写了一次,而且接口一多,看着一望无际的路由表,总感觉划分的不是很优雅,而且不太好找自己想要的接口;并且笔者在写springBoot项目时,非常喜欢用restful插件来找路由,比如输入/v1/xxx/xxx/xxx就能找到对应的路由,但是在gin的路由表不是很好找

  • 每个gin的路由都必须要手动获取参数,然后校验,校验不通过再返回错误(像下面那样),这部分逻辑感觉完全应该复用(完全忍受不了写重复代码😠)。参数就应该交给框架解析,或者说有切面或者hook来统一完成这部分的逻辑

    // gin
    engine.Get("/v1/xxx", xxx)func xxx(ctx *gin.Context) {var (err errorparams xxxx)// Bind your param dataif err = ShouldBindQuery(ctx, &params); err != nil {ctx.AbortWithStatusJSON(http.StatusOK, "traceId", 400, "bad request"))return}// validator your paramif err = validator.New().Struct(&params) ;err != nil {ctx.AbortWithStatusJSON(http.StatusOK, "traceId", 400, "bad request"))return}// do you codectx.JSON(http.StatusOK, "traceId", "ok"))
    }
    // 相比之下,参数Jet会自动帮你注入到你的参数列表里面,并且可以定义Hook统一在参数解析完毕,调用我们自己方法之前处理参数校验的逻辑
    // Jet
    func(YourJetController) GetV1Xxx(ctx jet.Ctx, args *Xxx) (any, error) {// do you codereturn xxx, err
    }
    
  • 接下来不是Gin的缺点,毕竟Gin只是一个基础的web框架,就是笔者更喜欢MVC架构或者DDD模式开发,这里面使用到依赖注入管理生命周期是比较合适的,笔者也不喜欢用类似wire需要生成代码的方式进行依赖注入,所有笔者使用Dig进行依赖注入,反射的方式其实也只影响项目启动的时间,但是go的启动本身就很快了,看不出啥影响

  • 然后就是定义了一些常用的数据结构,例如TrieLinkedHashMap,在golang里面其实提供的数据结构挺少的,但是像LinkedHashMap用的地方其实很多,我们需要O(1)级别的查找和添加,又需要有序的集合顺序

    func TestLinkedHashMap(t *testing.T) {m := maps.NewLinkedHashMap[string, int]()m.Put("one", 1)m.Put("two", 2)m.Put("three", 3)m.ForEach(func(k string, v int) {t.Logf("%s: %d\n", k, v)})
    }$ go test -run TestLinkedHashMap
    one: 1
    two: 2
    three: 3
    PASS
    ok      GoKit/collection/maps   0.166s
    

example

下面是使用的一个例子

func main() {//jet.Register(&DemoController{})xlog.SetOutputLevel(xlog.Ldebug)jet.AddMiddleware(jet.TraceJetMiddleware)jet.Run(":8080")
}// 使用依赖注入的方式注入需要让Jet管理的Controller
func init() {jet.Provide(NewDemoController)
}func NewDemoController() jet.ControllerResult {return jet.NewJetController(&DemoController{})
}type BaseController struct {jet.IJetController
}// 对参数进行校验,如果不通过会返回`reg_err_info`中定义的错误
func (BaseController) PostParamsParseHook(param any) error {if err := utils.Struct(param); err != nil {return errors.New(utils.ProcessErr(param, err))}return nil
}// PostMethodExecuteHook restful 将所有请求以restful方式返回
func (BaseController) PostMethodExecuteHook(param any) (data any, err error) {// restfulreturn utils.ObjToJsonStr(param), nil
}// 上面的两个hook可以直接让controller继承jet.BaseJetController,这样就不用写了type DemoController struct {BaseController
}type Person struct {Name string `json:"name" validate:"required" reg_err_info="不能为空"` // 校验不通过会返回`reg_err_info`的内容Age  int    `json:"age"`
}// 路由 get /v1/usage/{id}/week 已经可以访问了
func (j *DemoController) GetV1Usage0Week(ctx jet.Ctx, args *jet.Args) (any, error) {ctx.Logger().Infof("GetV1Usage0Week %v", *args)return map[string]any{"request_id": ctx.Logger().GenReqId(), "code": 200, data: args}
}
$ curl http://localhost:8080/v1/usage/1/week
{"request_id":"H5OQ4Jg0yBtg","code":200,"message":"success","data":["1"]}

正常情况下会打印日志的全路径,我们在启动时候加上-trimpath就可以只打印项目的path

image.png

image.png

http://www.khdw.cn/news/22699.html

相关文章:

  • 做我女朋友吧网站nba总得分排行榜最新
  • 外贸网站建设评价seo排名第一的企业
  • 武汉营销型企业网站开发seo职位描述
  • 什么网站可以做高三英语试题热门推广软件
  • 网站建设大体包含河南关键词优化搜索
  • 网站建设 太原北京网站推广公司
  • 网站开发大牛带佣金的旅游推广平台有哪些
  • 做动态表情包的网站网站建设平台软件
  • 在 wordpress 本地安装 wordpress标题seo是什么意思
  • 江苏省备案网站石家庄疫情
  • 福州免费做网站运营推广的方式和渠道有哪些
  • 做网站网站制作如何给企业做网络推广
  • 企业网站的网络营销seocms
  • 什么是网站链接优化百度推广天津总代理
  • 苏中建设官方网站郑州发布最新通告
  • 优化网站排名方法教程网站制作流程图
  • 鸿邑科技 网站建设网站查询域名解析
  • 做非法网站线上销售平台有哪些
  • 一个专业做设计的网站设计公司企业网站
  • 大连网站制做公司百度网站登录入口
  • 四川盼之网络科技官网长沙百度seo
  • 怎么做网站的后台管理系统优化设计官网
  • 福州做网站建设上海搜索排名优化
  • 广州有什么好玩的旅游景点长沙电商优化
  • 酱香拿铁采取了哪些网络营销方式关键词优化怎么做
  • 图片制作动图seo门户网站优化
  • 真人做爰直播网站新公司如何做推广
  • 做建筑钢材的b2b网站有哪些杭州百度公司在哪里
  • 佰牛深圳网站建设关联词有哪些四年级
  • 制作网址怎么收费seochinaz查询