@@ -27,11 +27,34 @@ func useCopyGeneric[K comparable, V any, M ~map[K]V](dst, src M) {
27
27
}
28
28
}
29
29
30
- func useClone (src map [int ]string ) {
31
- // Replace make(...) by maps.Clone.
30
+ func useCopyNotClone (src map [int ]string ) {
31
+ // Clone is tempting but wrong when src may be nil; see #71844.
32
+
33
+ // Replace make(...) by maps.Copy.
32
34
dst := make (map [int ]string , len (src ))
33
35
for key , value := range src {
34
- dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Clone"
36
+ dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Copy"
37
+ }
38
+
39
+ dst = map [int ]string {}
40
+ for key , value := range src {
41
+ dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Copy"
42
+ }
43
+ println (dst )
44
+ }
45
+
46
+ func useCopyParen (src map [int ]string ) {
47
+ // Clone is tempting but wrong when src may be nil; see #71844.
48
+
49
+ // Replace (make)(...) by maps.Clone.
50
+ dst := (make )(map [int ]string , len (src ))
51
+ for key , value := range src {
52
+ dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Copy"
53
+ }
54
+
55
+ dst = (map [int ]string {})
56
+ for key , value := range src {
57
+ dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Copy"
35
58
}
36
59
println (dst )
37
60
}
@@ -55,32 +78,38 @@ func useCopy_typesDiffer2(src map[int]string) {
55
78
}
56
79
57
80
func useClone_typesDiffer3 (src map [int ]string ) {
81
+ // Clone is tempting but wrong when src may be nil; see #71844.
82
+
58
83
// Replace loop and make(...) as maps.Clone(src) returns map[int]string
59
84
// which is assignable to M.
60
85
var dst M
61
86
dst = make (M , len (src ))
62
87
for key , value := range src {
63
- dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Clone "
88
+ dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Copy "
64
89
}
65
90
println (dst )
66
91
}
67
92
68
93
func useClone_typesDiffer4 (src map [int ]string ) {
94
+ // Clone is tempting but wrong when src may be nil; see #71844.
95
+
69
96
// Replace loop and make(...) as maps.Clone(src) returns map[int]string
70
97
// which is assignable to M.
71
98
var dst M
72
99
dst = make (M , len (src ))
73
100
for key , value := range src {
74
- dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Clone "
101
+ dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Copy "
75
102
}
76
103
println (dst )
77
104
}
78
105
79
106
func useClone_generic [Map ~ map [K ]V , K comparable , V any ](src Map ) {
107
+ // Clone is tempting but wrong when src may be nil; see #71844.
108
+
80
109
// Replace loop and make(...) by maps.Clone
81
110
dst := make (Map , len (src ))
82
111
for key , value := range src {
83
- dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Clone "
112
+ dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Copy "
84
113
}
85
114
println (dst )
86
115
}
0 commit comments