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

奢侈品网站策划方案html教程菜鸟教程视频

奢侈品网站策划方案,html教程菜鸟教程视频,手表网站建站,国外html响应式网站模板下载本文介绍 Golang 的 gin 框架接收json数据并解析的2种方法。 起因及排查 某微服务工程#xff0c;最近测试发现请求超时#xff0c;由于特殊原因超时较短#xff0c;如果请求处理耗时超过1秒则认为失败。排查发现#xff0c;可能是gin接收解析json数据存在耗时#xff0c…本文介绍 Golang 的 gin 框架接收json数据并解析的2种方法。 起因及排查 某微服务工程最近测试发现请求超时由于特殊原因超时较短如果请求处理耗时超过1秒则认为失败。排查发现可能是gin接收解析json数据存在耗时代码使用ctx.ShouldBindJSON直接解析得到所需结构体然后通过自实现的FormatJsonStruct函数格式化并输出到日志。该格式函数如下 func FormatJsonStruct(str interface{}, format bool) (ret string) {ret jsonstr, err : json.Marshal(str)if err ! nil {return}if format {var out bytes.Buffer_ json.Indent(out, []byte(jsonstr), , )ret out.String()} else {ret string(jsonstr)}return }从上述过程看到先是调用了ShouldBindJSON再调用了Marshal函数解析成字符串。于是考虑调用ReadAll读取数据再用Unmarshal解析成结构体直接输出结构体数据。下面模拟2种不同的解析josn方法。 模拟程序 本节结合代码简单描述模拟程序。详见文附录。 一般地在gin中业务处理函数带有*gin.Context参数如本文的HandleGinShouldBindJSON使用ctx.ShouldBindJSON(request)将ctx中带的数据直接转换成目标结构体。 也可以通过ioutil.ReadAll(ctx.Request.Body)先读取客户端来的数据由于约定为json格式数据所以可以用json.Unmarshal解析成结构体。 无法哪种方法其实都很方便相对而言前者更便捷。 测试结果 使用curl模拟请求命令示例如下 curl http://127.0.0.1:9000/foo -X POST -H Content-Type:application/json -d {id:test_001, op:etc, timestamp:12342134341234, data:{name:foo, addr:bar, code:450481, age:100}}curl http://127.0.0.1:9000/bar -X POST -H Content-Type:application/json -d {id:test_001, op:etc, timestamp:12342134341234, data:{name:foo, addr:bar, code:450481, age:100}} 服务端输出日志 RUN TestGin test of gin run gin [GIN-debug] [WARNING] Running in debug mode. Switch to release mode in production. - using env: export GIN_MODErelease- using code: gin.SetMode(gin.ReleaseMode)[GIN-debug] POST /foo -- webdemo/test/gin_test.HandleGinShouldBindJSON (1 handlers) [GIN-debug] POST /bar -- webdemo/test/gin_test.HandleGinUnmarshal (1 handlers) [GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value. Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details. [GIN-debug] Listening and serving HTTP on :9000 ShouldBindJSON: request: #{test_001 etc 12342134341234 {foo bar 450481 100}} Unmarshal request: #{test_001 etc 12342134341234 {foo bar 450481 100}} exit status 0xc000013a小结 就目前测试和修改结果看本文所述方法并非主因真正原因待查。 附 完整代码 /* 结构体 {id: test_001,op: etc,timestamp: 12342134341234,data: {name: foo,addr: bar,code: 450481,age: 100} }curl http://127.0.0.1:9000/foo -X POST -H Content-Type:application/json -d {id:test_001, op:etc, timestamp:12342134341234, data:{name:foo, addr:bar, code:450481, age:100}}curl http://127.0.0.1:9000/bar -X POST -H Content-Type:application/json -d {id:test_001, op:etc, timestamp:12342134341234, data:{name:foo, addr:bar, code:450481, age:100}}*/package testimport (encoding/jsonfmtio/ioutilstringstestinggithub.com/gin-gonic/gin )var g_port string 9000type MyRequest_t struct {Id string json:idOp string json:opTimestamp int json:timestampData ReqData_t json:data }type ReqData_t struct {Name string json:nameAddr string json:addrCode int json:codeAge int json:age }func routerPost(r *gin.Engine) {r.POST(/foo, HandleGinShouldBindJSON)r.POST(/bar, HandleGinUnmarshal) }func initGin() {fmt.Println(run gin)router : gin.New()routerPost(router)router.Run(: g_port) }func HandleGinShouldBindJSON(ctx *gin.Context) {var request MyRequest_tvar err errorctxType : ctx.Request.Header.Get(Content-Type)if strings.Contains(ctxType, application/json) { // 纯 json// 先获取总的jsonif err ctx.ShouldBindJSON(request); err ! nil {fmt.Printf(ShouldBindJSON failed: %v\n, err)return}fmt.Printf(ShouldBindJSON: request: #%v\n, request)} else {fmt.Println(非json)return} }func HandleGinUnmarshal(ctx *gin.Context) {var request MyRequest_tvar err errorvar reqbuffer []bytectxType : ctx.Request.Header.Get(Content-Type)if strings.Contains(ctxType, application/json) { // 纯 jsonreqbuffer, err ioutil.ReadAll(ctx.Request.Body)if err ! nil {fmt.Printf(ReadAll body failed: %v\n, err)return}err json.Unmarshal(reqbuffer, request)if err ! nil {fmt.Printf(Unmarshal to request failed: %v\n, err)return}fmt.Printf(Unmarshal request: #%v\n, request)} else {fmt.Println(非json)return} }func TestGin(t *testing.T) {fmt.Println(test of gin)initGin() }
http://www.dnsts.com.cn/news/110422.html

相关文章:

  • 健网站怎么做dell公司网站设计特色
  • 建设工程信息网官网新网站网站制作易捷网络
  • 郑州做网站设计自己做的网站怎么放图片
  • 凡科建站收费专注昆明网站建设
  • 邯郸网站设计怎么申请沧州网站设计公司价格
  • 做网站静态和动态淘宝店网站论坛怎么做
  • 网站开发团队名称上海小程序开发报价
  • 网站注册地址易加互动平台
  • 静态营销网站代码网站备案是每年一次吗
  • 自己服务器建网站 备案双井做网站的公司
  • 制作网站river免费wordpress主题下载
  • 网站建设公司价位h5网页版入口
  • 哪些网站做简历合适看p站用什么浏览器
  • 公司做网站 优帮云工程建设网最新信息网站
  • 吐鲁番好网站建设设计app线上推广是什么工作
  • 免版权图片网站龙岗成交型网站建设
  • 网站开发好要租服务器吗中国菲律宾数据
  • 杭州网站优化培训网站推广排名收费
  • 商城网站建设服务哪家好中职网站建设与维护考试题
  • 医美的网站主页怎么做聚宝汇 网站建设
  • 制作网站的页面设计怎么做电商平台哪个好
  • 网站的现状电子商务有限公司有哪些
  • 免费公司网站建设正在建设的网站可以随时进入吗
  • 企业网站建设相关书籍在线阅读郑州网站专业建设qq
  • 大连网站设计公司徐州网红有哪些人
  • 餐饮门户网站源码软件开发平台协议
  • 建设网站教程2016网站的引导页面是什么意思
  • 通辽市城乡建设局网站买衣服网站排名
  • 做设计找参考的设计网站有哪些建设网站步骤是
  • 天津知名网站建设公司苏州保洁公司哪家好