游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Goui

  Goweb如何一步步整合swaggerui我们可以官方提供的方式:https:github。comgoswaggergoswagger,主要方式是:1、写我们的go程序,2、让swagger工具扫描我们的go文件,3、生成swagger注释。
  我们先说存在的问题:1、注释本地生成,会因为swagger版本不一致出现问题,出现各种git冲突,需要采用打包编译时去执行生成。2、违背了编程的方式。3、为什么Java的swagger那么火,是因为和springboot完美整合,那么Spring解决的其实就是ioc的控制,所以go的web也不需要程序去控制,路由,输入,输出,所以我们需要这么做。前期准备1、需要实现SpringBoot的controoler接口的方式
  大致需求:1、拿到路由,2、拿到请求、响应(这个是go所有web框架做不到的,所以需要转变思想)RestControllerpublicclassUserController{AutowiredprivateUserRepositoryrepository;PostMapping(save)publicUserecho(UserInfoDtoinfo){returnrepository。save(User。builder()。id(info。getId())。userName(info。getName())。build());}}2、转变思想
  这个反射调用的框架,我写了一个,希望大家多多提交bug,因为反射本身缺陷很多:https:github。comAnthonyDonggorpcvar(userServiceservice。NewUserService())funcuserRoute(eengines。Engine){g:e。Group(report)g。POST(benchmark,http。NewHandlerFunc(userService。BenchMark))}定义context。Context(必不可少),类似于Java的ThreadLocalrequestdto。BenchmarkRequest请求dto。BenchmarkResponse详情error由于go本身没有throw,所以需要显示的申明后期考虑加入web模块,但是目前主流web框架都是依赖于ctx向下传递,所以go和Java这点不一样(目前不考虑,可以考虑使用gin的context),虽然Springmvc中也可以接受httprequest,httpresponse但是由于它的bind,用户都不care了(这就是申明式编程的好处)typeUserServiceinterface{BenchMark(ctxcontext。Context,requestdto。BenchmarkRequest)(dto。BenchmarkResponse,error)}
  实现了这个,那么我们就开始吧,因为这些要求的,我们都可以拿到。3、定义强路由
  1、因为go本身并没有方法级别的注解,如果我们可以在每个interface上申明接口,在每个方法上申明路由pathuserservicetypeUserServiceinterface{pathbenchmarkmethodgetBenchMark(ctxcontext。Context,requestdto。BenchmarkRequest)(dto。BenchmarkResponse,cerror。Cerror)}
  如果这样子,那么对于go的开发者特别不友好
  2、所有采用func注册的方式
  可以在接口后面指定get其他g。POST(benchmark,http。NewHandlerFunc(userService。BenchMark),op。Get())
  目前采用的这种方式:1、可以显示的声明,符合go开发者的习惯,2、可以不用扫描go文件(springboot采用的这种方式)整合swagger客户端找到swagger的web端资源包,然后将其都暴露出去,接下来核心就是swagger。json了。
  资源在我的这个项目的swagger里面https:github。comAnthonyDonggorpc,后期会考虑静态资源使用api调用的方式(转发的方式),目前是借助工具写在了go文件里:https:github。comaurthgobindata,这个工具很nice,可以讲文件写入到go文件里,以二进制的形式,我们知道go是不可以打包成jar包的,只有二进制文件,静态资源是一个很难受的事情,所以需要这么做。const(jsjscsscsshtmlhtmlbytebytejsonjson)funcaddSwagger(pathstring,typestring)func(writerhttp。ResponseWriter,requesthttp。Request){returnfunc(writerhttp。ResponseWriter,requesthttp。Request){body,:swagger。Asset(path)switchtype{casejs:writer。Header()。Set(contenttype,applicationjavascript)casecss:writer。Header()。Set(contenttype,textcss)casejson:writer。Header()。Set(contenttype,applicationjson)}iftypebyte{fmt。Fprint(writer,body)return}fmt。Fprint(writer,string(body))}}funcaddSwaggerRouter(pathstring,typestring){http。HandleFunc(path,addSwagger(path,type))}funcmain(){swagger内置服务端需要的东西addSwaggerRouter(swaggeruiabsolutepath。js,js)addSwaggerRouter(swaggeruifavicon16x16。png,byte)addSwaggerRouter(swaggeruifavicon32x32。png,byte)addSwaggerRouter(swaggeruiindex。html,html)addSwaggerRouter(swaggeruiindex。js,js)addSwaggerRouter(swaggeruioauth2redirect。html,html)addSwaggerRouter(swaggeruipackage。json,json)addSwaggerRouter(swaggeruiswaggeruibundle。js,js)addSwaggerRouter(swaggeruiswaggeruibundle。js。map,html)addSwaggerRouter(swaggeruiswaggeruistandalonepreset。js,js)addSwaggerRouter(swaggeruiswaggeruistandalonepreset。js。map,html)addSwaggerRouter(swaggeruiswaggerui。css,css)addSwaggerRouter(swaggeruiswaggerui。css。map,html)addSwaggerRouter(swaggeruiswaggerui。js,js)addSwaggerRouter(swaggeruiswaggerui。js。map,html)http。HandleFunc(swagger。json,func(writerhttp。ResponseWriter,requesthttp。Request){writer。Header()。Set(contenttype,applicationjson)fmt。Fprintf(writer,doc)})http。ListenAndServe(:8888,nil)}swaggerjson
  这个文件来自于faygo,swagger核心是一个api接口,类似于下面这个样子{swagger:2。0,info:{description:SpringSwaager2RESTAPI,version:V1,title:RESTAPI,contact:{name:anthony,url:https:github。comAnthonyDong,email:574986060qq。com},license:{name:TheApacheLicense,url:https:opensource。orglicensesMIT}},host:localhost:8888,basePath:,tags:〔{name:usercontroller,description:UserController}〕,paths:{find{id}:{get:{tags:〔usercontroller〕,summary:find,operationId:findUsingGET,produces:〔〕,parameters:〔{name:id,in:path,description:id,required:true,type:integer,format:int64}〕,responses:{200:{description:OK,schema:{ref:definitionsUser}}},deprecated:false}},save{name}:{get:{tags:〔usercontroller〕,summary:echo,operationId:echoUsingGET,produces:〔〕,parameters:〔{name:name,in:path,description:name,required:true,type:string}〕,responses:{200:{description:OK,schema:{ref:definitionsUser}}},deprecated:false}}},definitions:{User:{type:object,properties:{id:{type:integer,format:int64},userName:{type:string}},title:User}}}一步步写doc
  下面是swaggerdoc的大致结构,我们必须将我们的api注入进去doc:swagger。Swagger{Version:swagger。Version,Info:swagger。Info{Title:RESTAPI,Contact:swagger。Contact{Email:fanhaodong516gmail。com,},License:swagger。License{Name:TheApacheLicense,Url:https:opensource。orglicensesMIT,},},Host:localhost:8888,BasePath:,Tags:〔〕swagger。Tag{},tagPaths:map〔string〕map〔string〕swagger。Opera{},所有的api路由Definitions:map〔string〕swagger。Definition{},定义dto对象}tag是什么
  usercontroller就是一个tag,对于go来说一般是group可以定义为一个controller
  TagobjectTagstruct{Namestringjson:name一个标签:usercontrollerDescriptionstringjson:description一个des:usercontroller}
  同时所有的path都可以指定多个tagOperastruct{Tags〔〕stringjson:tags这里是tagSummarystringjson:summaryDescriptionstringjson:descriptionOperationIdstringjson:operationIdConsumes〔〕stringjson:consumes,omitemptyProduces〔〕stringjson:produces,omitemptyParameters〔〕Parameterjson:parameters,omitemptyResponsesmap〔string〕Respjson:responses{httpcode:resp}Security〔〕map〔string〕〔〕stringjson:security,omitempty}认识path
  这就是一个pathPathsmap〔string〕map〔string〕Operajson:paths,omitempty
  结构是个两级mapsave:{post:{tags:〔usercontroller〕,summary:echo,operationId:echoUsingPOST,consumes:〔请求类型applicationjson〕,produces:〔响应类型〕,parameters:〔核心关注的点,如果多级别{name:id,字段描述in:query,查询required:false,是否强需求,可以借助于binding,也就是go的Validator(https:github。comgoplaygroundvalidator)type:integer,类型format:int64真实类型(go类型)},{name:name,in:query,required:false,type:string},{name:user。id,in:query,required:false,type:integer,format:int64},{name:user。userName,in:query,required:false,type:string}〕,responses:{200:{状态吗description:OK,响应描述schema:{ref:definitionsUser指定路由:(nice,所以我们的dto全部放到modle里)}}},deprecated:false}},总结
  通过以上,我们可以get到,确实是不是特别难,是有一定规律的,那么接下来,我们就可以开始设计框架了。

朱珠真瘦不少,穿碎花裙街头拍大片好嫩,166身材苗条不像生过时尚元素在时尚圈真的是不一样的存在,它能够让驾驭者变得更加时尚,惊艳,当然时尚元素的利用一定要慎重,不能为了追求潮流,从而选择格格不入的元素,这样不仅不会提升造型的魅力,还会显……烹饪的科学DK联合食品科学专家,解答关于烹饪的一切网络上流传着一个神奇的兴趣小组,在这里,有人制造室内极光其实是锅底粘了隔热垫。有人用不粘锅炼金冶铁其实是煮冰糖杨梅忘了看火。还有人走在科技前沿制造赛博螃……属于燃油车的公平还会不会来?2009年起,政府开始主导汽车电动化,首先从公务、出行市场试点,拉开了我国新能源汽车发展大幕。2022年12月新能源汽车国内零售渗透率29。5,中国品牌在销量前五的车企中……即时零售被写进中央一号文件背后重新发现县域经济解法solution:寻找新经济和垂直行业的100种打法原创科技考拉2023开年伊始,不少零售商和创业者就嗅到了新的机会和风口。2月13日,《中共中央国务院关……快来解锁新的旅游出行方式房车自驾4月1日起正式实施4项便利驾考领证新措施一是推行大中型客货车驾驶证全国一证通考二是恢复驾驶资格考试跨省可办三是优化驾驶证考试内容和项目四是新增轻型牵引挂……到底你适合喝豆浆,还是适合喝牛奶?谁的优势最大?有几个不同点豆浆、牛奶,是生活中常见的两种饮品,营养健康又美味,可网友们硬是想要在这两个饮品中分出个胜负,要怎么办?牛奶VS豆浆:很多人都想知道,牛奶、豆浆,到底谁在营养方面更……迪马济奥巴黎将报价提高至4000万欧元奖金,斯卡马卡接近加盟直播吧6月30日讯转会专家迪马济奥透露,巴黎圣日耳曼对斯卡马卡的报价提高至4000万欧元加奖金。23岁的斯卡马卡是一名意大利国脚前锋,上赛季他在萨索洛打进16个意甲联赛进……人生,不怨,不恨,不强求,随缘世界总不完美,人生总有遗憾,并非每个故事,都有结局。一生中,我们遇人无数,遇见的人很多很多,相知的人,寥寥无几;能陪我们走一程的人,很多很多;能陪我们走一生的人,屈指可数……央行决定降准0。25个百分点专家解读为推动经济实现质的有效提升和量的合理增长,打好宏观政策组合拳,提高服务实体经济水平,保持银行体系流动性合理充裕,中国人民银行决定于2023年3月27日降低金融机构存款准备金率0……喜报!卧龙山街道北海社区被评为全省最美志愿服务社区大众网海报新闻记者杨金鹏日照报道近日,2022年度全省学雷锋志愿服务四个100先进典型表彰名单公示完毕,日照市16个志愿服务先进典型上榜,山海天旅游度假区卧龙山街道北海社……网红鸡爪制作配方网红鸡爪比例卤汁制作材料300克水比例:冰糖,100克,黄柠檬,1个老姜,15克,大蒜,20克鸡精,5克,野山椒30克指天椒,20克,盐10克……30几岁不管有钱没钱,别再喝加了大米玉米淀粉的啤酒了不知道大家注意到了没有,在超市里随便拿起一瓶啤酒看看配料表,配料表上大多数都会列出大米,对于喝啤酒有点挑剔的人来说,这样的啤酒就是水啤,喝起来像喝水一样,没有感觉。喝啤酒……
以前国家仿制茅台不行,为什么现在酱香酒那么多?谢邀〔作揖〕在回答问题之前纠正一下题主的提问,在1975年,因茅台酒产能有限,周恩来总理提出易地茅台实验,增加茅台酒产能,所以应该是增产,由方毅任厂长,专门从贵州茅台酒厂聘请了……iPhone14Pro新配色曝光辨识度超高,五米外轻松认出6月23日消息,按照惯例苹果在每年的9月份都会推出自家的新iPhone。虽然今年的iPhone14系列还没发布,但随着发布会时间不断临近,网上关于它的信息也越来越多。近日网上就……表面上是阻止外星人入侵的TPS游戏,实则却是一款保姆模拟器《调查局:幽浮解密》是XCOM系列重启之后的第二部系列作,看起来是2K买了这IP之后,给这系列所做的一种全新尝试。就在前作《幽浮:未知敌人》获得了空前的成功之后,想扩充这个IP……阔腿裤快收一收吧,今年更流行九分烟管裤,知性显腿细每年一到夏天,各种款式的裤装让人挑花了眼,冰丝裤、直筒裤、喇叭裤、阔腿裤面对着如此繁多的裤装选项,相信很多人都不知道应该怎么去挑选和搭配了。如果今年夏天你还在纠结裤装的选……入秋了,推荐12道家常下饭菜,好吃不贵,适合秋季吃,天天不重本期导读:入秋了,推荐12道家常下饭菜,好吃不贵,适合秋季吃,天天不重样入秋了,天气也变得凉爽起来,早晚的温差开始加大,夜间开始有了阵阵的凉意。天气变凉,人的胃口也变得好……孩子身高是否达标?身高对照表,一目了然你家孩子今年多大了?身高多少?达到理想身高了吗?孩子的身高问题一直是爸爸妈妈最关心的问题。一起来看看该怎么计算自家孩子身高是否达标。如果没有达标是由什么原因引起的?……特下饭的几道家常菜,美味特开胃,鲜香可口魔芋烧鸭魔芋清洗干净,切片,水烧开,锅里放适量水,水烧开,放魔芋焯水三分钟,捞出沥干水分。鸭肉清洗干净,斩成大块,锅里放适量的水,水烧开,放入鸭块儿,焯水三分钟,捞……简单又下饭,分分钟搞定土豆丝是由土豆为主要食材做成的一道菜品,属于大众菜。常吃土豆能及时地给体内补充所需求的钾元素;土豆中的维生素C对大脑细胞具有保健作用。中医认为引,土豆性平,有和胃、调中、健脾、……大妈在九寨沟脱鞋下水戏水拍照,景区回应行政处罚,公开道歉近日,有网友爆料九寨沟景区内几名大妈脱鞋下水打卡拍照。网传视频中大妈们在水中舞蹈,其他游客则站在水边游览。网友质疑:这可是世界自然遗产,水质被破坏了多少年才可以恢复?工作……NBA收看人数最少的5场总决赛马刺3度上榜,湖火大战创历史新NBA是目前世界上竞技水平最高、球迷群体最多的职业篮球联赛,在全球拥有无数粉丝,尤其是一年一度的总决赛,算是每个赛季的封箱之战,肯定会有更多人关注,今天我们就来聊聊总决赛收看人……南瓜饼的家常做法,口感软糯香甜,简单易学,早餐给孩子吃朋友们,喜欢的可以点赞收藏,记得关注我哟,以后还会有更多美食分享给大家。今天给大家分享一道好吃的早餐南瓜饼,个个松软可口,口感软糯香甜,真是太美味了!!!做法非常简单,自……湖北小县城饺子王,30多年只卖一种馅,10元一份,都是回头客饺子是我国独有的传统特色美食,每逢节日餐桌上必不可少,饺子的制作过程并不复杂,家家户户都会包,是贴近人们生活的一种平民美食。别看每家每户都会包饺子,并不妨碍街上专门卖饺子的店生……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网