@@ -17,6 +17,7 @@ package spec
1717import (
1818 "fmt"
1919 "strings"
20+ "sync"
2021
2122 "github.com/go-openapi/jsonpointer"
2223 "github.com/go-openapi/swag"
@@ -131,7 +132,10 @@ func (r SchemaURL) MarshalJSON() ([]byte, error) {
131132
132133// UnmarshalJSON unmarshal this from JSON
133134func (r * SchemaURL ) UnmarshalJSON (data []byte ) error {
134- var v map [string ]interface {}
135+ v := poolOfMaps .BorrowMap ()
136+ defer func () {
137+ poolOfMaps .RedeemMap (v )
138+ }()
135139 if err := json .Unmarshal (data , & v ); err != nil {
136140 return err
137141 }
@@ -610,7 +614,11 @@ func (s *Schema) UnmarshalJSON(data []byte) error {
610614 SwaggerSchemaProps : props .SwaggerSchemaProps ,
611615 }
612616
613- var d map [string ]interface {}
617+ //var d map[string]interface{}
618+ d := poolOfMaps .BorrowMap ()
619+ defer func () {
620+ poolOfMaps .RedeemMap (d )
621+ }()
614622 if err := json .Unmarshal (data , & d ); err != nil {
615623 return err
616624 }
@@ -643,3 +651,29 @@ func (s *Schema) UnmarshalJSON(data []byte) error {
643651
644652 return nil
645653}
654+
655+ type mapPool struct {
656+ * sync.Pool
657+ }
658+
659+ var poolOfMaps = mapPool {
660+ Pool : & sync.Pool {
661+ New : func () any {
662+ return make (map [string ]any )
663+ },
664+ },
665+ }
666+
667+ func (p mapPool ) BorrowMap () map [string ]any {
668+ m := p .Get ().(map [string ]any )
669+ // go1.21 clear(m)
670+ for k := range m {
671+ delete (m , k )
672+ }
673+
674+ return m
675+ }
676+
677+ func (p mapPool ) RedeemMap (m map [string ]any ) {
678+ p .Put (m )
679+ }
0 commit comments