@@ -27,30 +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 "
35
37
}
36
38
37
39
dst = map [int ]string {}
38
40
for key , value := range src {
39
- dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Clone "
41
+ dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Copy "
40
42
}
41
43
println (dst )
42
44
}
43
45
44
- func useCloneParen (src map [int ]string ) {
46
+ func useCopyParen (src map [int ]string ) {
47
+ // Clone is tempting but wrong when src may be nil; see #71844.
48
+
45
49
// Replace (make)(...) by maps.Clone.
46
50
dst := (make )(map [int ]string , len (src ))
47
51
for key , value := range src {
48
- dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Clone "
52
+ dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Copy "
49
53
}
50
54
51
55
dst = (map [int ]string {})
52
56
for key , value := range src {
53
- dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Clone "
57
+ dst [key ] = value // want "Replace m\\[k\\]=v loop with maps.Copy "
54
58
}
55
59
println (dst )
56
60
}
@@ -74,32 +78,38 @@ func useCopy_typesDiffer2(src map[int]string) {
74
78
}
75
79
76
80
func useClone_typesDiffer3 (src map [int ]string ) {
81
+ // Clone is tempting but wrong when src may be nil; see #71844.
82
+
77
83
// Replace loop and make(...) as maps.Clone(src) returns map[int]string
78
84
// which is assignable to M.
79
85
var dst M
80
86
dst = make (M , len (src ))
81
87
for key , value := range src {
82
- 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 "
83
89
}
84
90
println (dst )
85
91
}
86
92
87
93
func useClone_typesDiffer4 (src map [int ]string ) {
94
+ // Clone is tempting but wrong when src may be nil; see #71844.
95
+
88
96
// Replace loop and make(...) as maps.Clone(src) returns map[int]string
89
97
// which is assignable to M.
90
98
var dst M
91
99
dst = make (M , len (src ))
92
100
for key , value := range src {
93
- 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 "
94
102
}
95
103
println (dst )
96
104
}
97
105
98
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
+
99
109
// Replace loop and make(...) by maps.Clone
100
110
dst := make (Map , len (src ))
101
111
for key , value := range src {
102
- 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 "
103
113
}
104
114
println (dst )
105
115
}
0 commit comments