package http import ( "context" "errors" "fmt" _ "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/contrib/registry/consul/v2" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/gclient" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/net/gsel" "github.com/gogf/gf/v2/net/gsvc" "github.com/gogf/gf/v2/os/glog" "github.com/gogf/gf/v2/util/gconv" "net/http" "reflect" "regexp" "strings" ) type ResponseEmpty struct { } const PageSize = 20 type Page struct { PageNum int `p:"pageNum"` //当前页码 PageSize int `p:"pageSize"` //每页数 Total int //总页数 } var Httpserver = g.Server() func init() { //s.Use(common.Cors) //中间件验证 //s.EnablePProf() //启用性能分析 Httpserver.SetOpenApiPath("/api.json") Httpserver.SetSwaggerPath("/swagger") //api文档访问路径 Httpserver.SetDumpRouterMap(true) //关闭打印路由注册信息 Httpserver.BindMiddlewareDefault(ghttp.MiddlewareHandlerResponse, jaeger.NewTracer) //使用默认http返回结构 go Httpserver.Run() } 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.Bind(t) }) } } func getHttpClient(ctx context.Context) (client *gclient.Client, err error) { consulCfg, _ := g.Cfg().Get(context.Background(), "consul.address") consulAddr := consulCfg.String() registry, err := consul.New(consul.WithAddress(consulAddr)) if err != nil { return } gsvc.SetRegistry(registry) gsel.SetBuilder(gsel.NewBuilderRoundRobin()) client = g.Client() client.SetHeader("Authorization", g.RequestFromCtx(ctx).GetHeader("Authorization")) client.SetDiscovery(gsvc.GetRegistry()) return } func doRequest(ctx context.Context, method string, url string, target any, data ...any) (err error) { err = utils.ValidStructPtr(target) if err != nil { return } client, err := getHttpClient(ctx) if err != nil { return } response, err := client.DoRequest(ctx, method, url, data) if err != nil { return } defer func() { if err = response.Close(); err != nil { glog.Errorf(ctx, `%+v`, err) } }() 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, target any, data ...any) (err error) { err = doRequest(ctx, http.MethodGet, url, target, data) return } func Post(ctx context.Context, url string, target any, data ...any) (err error) { err = doRequest(ctx, http.MethodPost, url, target, data) return }