package http import ( "context" "errors" "fmt" "net/http" "reflect" "regexp" "strings" _ "gitee.com/red-future---jilin-g/common/consul" "gitee.com/red-future---jilin-g/common/jaeger" "gitee.com/red-future---jilin-g/common/utils" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/net/gsvc" "github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/util/gconv" ) type ResponseEmpty struct { } const PageSize = 20 type Page struct { PageNum int `p:"pageNum"` //当前页码 PageSize int `p:"pageSize"` //每页数 Total int //总页数 } var Httpserver = g.Server() var Httpclient = g.Client() func init() { err := gtime.SetTimeZone("Asia/Shanghai") if err != nil { panic("设置时区失败") } //s.Use(common.Cors) //中间件验证 //s.EnablePProf() //启用性能分析 Httpserver.SetOpenApiPath("/api.json") Httpserver.SetDumpRouterMap(true) //关闭打印路由注册信息 Httpserver.BindMiddlewareDefault(ghttp.MiddlewareHandlerResponse) Httpclient.SetDiscovery(gsvc.GetRegistry()) } func RouteRegister(controllers []interface{}) { re := regexp.MustCompile("[A-Z]") for _, t := range controllers { sName := reflect.ValueOf(t).Elem().Type().Name() convertedStr := re.ReplaceAllStringFunc(sName, func(s string) string { return fmt.Sprintf("/%s", strings.ToLower(s)) }) Httpserver.Group(convertedStr, func(group *ghttp.RouterGroup) { group.Middleware(jaeger.NewTracer) group.Bind(t) }) } go Httpserver.Run() } func doRequest(ctx context.Context, method string, url string, headers map[string]string, target any, data ...any) (err error) { err = utils.ValidStructPtr(target) if err != nil { return } Httpclient.SetHeader("Authorization", g.RequestFromCtx(ctx).GetHeader("Authorization")) Httpclient.SetHeaderMap(headers) response, err := Httpclient.DoRequest(ctx, method, url, data) defer response.Close() if err != nil { return } result := response.ReadAll() resultStrut := &ghttp.DefaultHandlerResponse{} if gconv.Struct(result, &resultStrut); resultStrut.Code != 200 { err = errors.New(resultStrut.Message) } else { gconv.Struct(resultStrut.Data, target) } return } func Get(ctx context.Context, url string, headers map[string]string, target any, data ...any) (err error) { err = doRequest(ctx, http.MethodGet, url, headers, target, data) return } func Post(ctx context.Context, url string, headers map[string]string, target any, data ...any) (err error) { err = doRequest(ctx, http.MethodPost, url, headers, target, data) return } func Put(ctx context.Context, url string, headers map[string]string, target any, data ...any) (err error) { err = doRequest(ctx, http.MethodPut, url, headers, target, data) return } func Delete(ctx context.Context, url string, headers map[string]string, target any, data ...any) (err error) { err = doRequest(ctx, http.MethodPut, url, headers, target, data) return }