@@ -17,6 +17,7 @@ package spec
17
17
import (
18
18
"fmt"
19
19
"strings"
20
+ "sync"
20
21
21
22
"github.com/go-openapi/jsonpointer"
22
23
"github.com/go-openapi/swag"
@@ -131,7 +132,10 @@ func (r SchemaURL) MarshalJSON() ([]byte, error) {
131
132
132
133
// UnmarshalJSON unmarshal this from JSON
133
134
func (r * SchemaURL ) UnmarshalJSON (data []byte ) error {
134
- var v map [string ]interface {}
135
+ v := poolOfMaps .BorrowMap ()
136
+ defer func () {
137
+ poolOfMaps .RedeemMap (v )
138
+ }()
135
139
if err := json .Unmarshal (data , & v ); err != nil {
136
140
return err
137
141
}
@@ -610,7 +614,11 @@ func (s *Schema) UnmarshalJSON(data []byte) error {
610
614
SwaggerSchemaProps : props .SwaggerSchemaProps ,
611
615
}
612
616
613
- var d map [string ]interface {}
617
+ //var d map[string]interface{}
618
+ d := poolOfMaps .BorrowMap ()
619
+ defer func () {
620
+ poolOfMaps .RedeemMap (d )
621
+ }()
614
622
if err := json .Unmarshal (data , & d ); err != nil {
615
623
return err
616
624
}
@@ -643,3 +651,29 @@ func (s *Schema) UnmarshalJSON(data []byte) error {
643
651
644
652
return nil
645
653
}
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