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

做外贸的人经常用什么网站郑州seo线下培训

做外贸的人经常用什么网站,郑州seo线下培训,wordpress修改数据库密码,挂马网站现象方式一、直接定义一个成功和失败的方法,在代码里面修改(对代码有侵入,每次都要修改代码) 1、封装一个统一返回的方法 package utilsimport ("github.com/zeromicro/go-zero/rest/httpx""net/http" )type Body struct {Code int json:"code…
方式一、直接定义一个成功和失败的方法,在代码里面修改(对代码有侵入,每次都要修改代码)
  • 1、封装一个统一返回的方法

    package utilsimport ("github.com/zeromicro/go-zero/rest/httpx""net/http"
    )type Body struct {Code    int         `json:"code"`Message string      `json:"message"`Result  interface{} `json:"result,omitempty"`
    }func Response(w http.ResponseWriter, code int, message string, data interface{}) {httpx.OkJson(w, Body{Code:    code,Message: message,Result:  data,})
    }// Success 成功的请求
    func Success(w http.ResponseWriter, data interface{}) {Response(w, 0, "请求成功", data)
    }// Fail 失败的请求
    func Fail(w http.ResponseWriter, message string) {Response(w, 1, message, nil)
    }
  • 2、修改代码的返回值方法调用

    func GetTestHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {l := demo.NewGetTestLogic(r.Context(), svcCtx)resp, err := l.GetTest()if err != nil {//httpx.ErrorCtx(r.Context(), w, err)utils.Fail(w, err.Error())} else {//httpx.OkJsonCtx(r.Context(), w, resp)utils.Success(w, resp)}}
    }
    
方式二、在api文件定义的时候直接返回的数据结构(在定义api的时候繁琐了)
  • 1、api文件中定义

    type Response {Code string      `json:"code"`Msg  string      `json:"msg"`Data interface{} `json:"data"`
    }@server (prefix: demo/v1group:  demo
    )
    service demo-api {@doc "测试"@handler GetTestget /testApi returns (Response)}
    
  • 2、在每次操作的时候可以写上

    func (l *GetTestLogic) GetTest() (resp *types.Response, err error) {return &types.Response{Code: "0",Msg:  "成功",Data: "hello world",}, nil
    }
    
  • 3、参考官网地址

方式三、自定义模版,直接修改返回的数据方法(可以接受)
  • 1、定义方法

    package utilsimport ("encoding/json""encoding/xml""errors""github.com/zeromicro/go-zero/core/logx""github.com/zeromicro/go-zero/rest/httpx""net/http"
    )type Body struct {Code    int         `json:"code"`Message string      `json:"message"`Result  interface{} `json:"result"` // omitempty json里面加了这个表示如果为空的时候字段不返回
    }type PageVo struct {Data       interface{} `json:"data"`       // 数据Total      int64       `json:"total"`      // 总条数PageSize   int64       `json:"pageSize"`   // 当前条数PageNumber int64       `json:"pageNumber"` // 当前页数
    }// Response 一般返回
    func Response(w http.ResponseWriter, resp interface{}, err error) {if err != nil {httpx.OkJson(w, Body{Code:    1,Message: err.Error(),Result:  nil,})} else {httpx.OkJson(w, Body{Code:    0,Message: "请求成功",Result:  resp,})}
    }// BuildPageData 返回分页数据
    func BuildPageData(w http.ResponseWriter, resp interface{}, total, pageSize, pageNumber int64, err error) {if err != nil {httpx.OkJson(w, Body{Code:    1,Message: err.Error(),Result: PageVo{Data:       nil,        // 数据Total:      0,          // 总条数PageSize:   pageSize,   // 当前条数PageNumber: pageNumber, // 当前页数},})} else {httpx.OkJson(w, Body{Code:    0,Message: "请求成功",Result: PageVo{Data:       resp,       // 数据Total:      total,      // 总条数PageSize:   pageSize,   // 当前条数PageNumber: pageNumber, // 当前页数},})}
    }func WriteString(w http.ResponseWriter, code int, v string) {w.Header().Set("Content-Type", "text/plain; charset=utf-8")w.WriteHeader(code)if n, err := w.Write([]byte(v)); err != nil {// http.ErrHandlerTimeout has been handled by http.TimeoutHandler,// so it's ignored here.if !errors.Is(err, http.ErrHandlerTimeout) {logx.Errorf("write response failed, error: %s", err)}} else if n < len(v) {logx.Errorf("actual bytes: %d, written bytes: %d", len(v), n)}
    }func WriteXml(w http.ResponseWriter, code int, v interface{}) {bs, err := xml.Marshal(v)if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}w.Header().Set("Content-Type", "text/xml")w.Header().Set("response_body", string(bs))w.WriteHeader(code)if n, err := w.Write(bs); err != nil {// http.ErrHandlerTimeout has been handled by http.TimeoutHandler,// so it's ignored here.if !errors.Is(err, http.ErrHandlerTimeout) {logx.Errorf("write response failed, error: %s", err)}} else if n < len(bs) {logx.Errorf("actual bytes: %d, written bytes: %d", len(bs), n)}
    }func WriteFile(w http.ResponseWriter, fileBytes []byte, err error) {var (b []byte)if err != nil {httpx.OkJson(w, err)b, _ = json.Marshal(err)w.Header().Set("response_body", string(b))return}w.Header().Set("Content-Type", "application/octet-stream")if n, err := w.Write(fileBytes); err != nil {// http.ErrHandlerTimeout has been handled by http.TimeoutHandler,// so it's ignored here.if !errors.Is(err, http.ErrHandlerTimeout) {logx.Errorf("write response failed, error: %s", err)}} else if n < len(fileBytes) {logx.Errorf("actual bytes: %d, written bytes: %d", len(fileBytes), n)}w.WriteHeader(200)
    }
  • 2、定义模版handler.tpl

    package {{.PkgName}}import ("net/http""github.com/zeromicro/go-zero/rest/httpx"{{.ImportPackages}}
    )func {{.HandlerName}}(svcCtx *svc.ServiceContext) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {{{if .HasRequest}}var req types.{{.RequestType}}if err := httpx.Parse(r, &req); err != nil {utils.TranslatorError(w, r, err)return}{{end}}l := {{.LogicName}}.New{{.LogicType}}(r.Context(), svcCtx){{if .HasResp}}resp, {{end}}err := l.{{.Call}}({{if .HasRequest}}&req{{end}}){{if .HasResp}}utils.Response(w, resp, err){{else}}utils.Response(w, nil, err){{end}}}
    }
  • 3、使用自己的模版生成方法

    goctl api go -api *api --dir . --style=goZero --home ../../goctl
    
  • 4、生成的代码中

    func DemoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {var req types.Requestif err := httpx.Parse(r, &req); err != nil {httpx.ErrorCtx(r.Context(), w, err)return}l := demo.NewDemoLogic(r.Context(), svcCtx)resp, err := l.Demo(&req)utils.Response(w, resp, err)}
    }
    
  • 5、这种方式不好的地方,在每个项目中导包可能不一样的,需要手动改动模版,或者把封装的方法封装成一个库发布

方式四、使用拦截器(最优方案)
  • 1、创建自己返回的方法

    package utilsimport ("context""github.com/zeromicro/go-zero/core/logx""net/http"
    )type Response struct {Code    int64       `json:"code"`Message string      `json:"message"`Result  interface{} `json:"result,omitempty"`
    }func Success(data interface{}) *Response {return &Response{Code:    0,Message: "请求成功",Result:  data,}
    }func Fail(err string) *Response {return &Response{Code:    1,Message: err,Result:  nil,}
    }func OkHandler(_ context.Context, v interface{}) any {return Success(v)
    }func ErrHandler(name string) func(ctx context.Context, err error) (int, any) {return func(ctx context.Context, err error) (int, any) {// 日志记录logx.WithContext(ctx).Errorf("【%s】 err %v", name, err)return http.StatusBadRequest, Fail(err.Error())}
    }
    
  • 2、在项目启动文件中添加自己的方法

在这里插入图片描述

// 使用拦截器
httpx.SetOkHandler(utils.OkHandler)
httpx.SetErrorHandlerCtx(utils.ErrHandler(c.Name))
http://www.shuangfujiaoyu.com/news/48353.html

相关文章:

  • 济南网站建设公司哪家好交换链接营销
  • webapp网站培训教育
  • 一站式做网站企业公司网络优化方案
  • 网络科技有限公司网站泉州seo优化
  • 网站新闻不添加关键词超链接对优化有影响吗百度搜索引擎优化相关性评价
  • 生物技术网站开发今日财经新闻
  • 古尔邦节网站建设如何进行网站性能优化?
  • 游戏网站建设平台网络营销专业是做什么的
  • 做网站欢迎页什么意思网络工具
  • 东莞建站公司快荐全网天下特别好2024年瘟疫大爆发
  • 深圳高端婚介公司seo排名怎么看
  • 网站开发测试阶段网站seo哪里做的好
  • 怎样做网站 网页品牌推广活动有哪些
  • 寻甸马铃薯建设网站b2b电子商务网
  • 苏州知名网站建设定制怎么制作网站二维码
  • 有没有专门做设计的网站郑州seo排名哪有
  • 做网站必须购买空间吗营销软文是什么
  • 福州专业网站制作如何提升百度关键词排名
  • 杭州企业求网站建设淘宝运营培训多少钱
  • 合肥网页网站制作武汉武汉最新
  • 网站域名地址是什么自助建站系统源码
  • c2c网站建设方案百度推广登录页面
  • 网站实名优化推广网站seo
  • 科技网站模板google搜索关键词
  • 许昌网站开发软文营销经典案例
  • 《电子商务网站开发与管理》宁波seo外包平台
  • 注册公司有几种类型网络优化初学者难吗
  • 如何用dw做网站前端大连seo建站
  • 一个网站价格广告公司
  • 广元百度做网站多少钱抖音引流推广怎么做