凡是觉得golang的map好的,大概都是喜欢在代码里反复一遍遍写
var (
key Key
value Value
exists bool
)
for k, v := range m {
key = k
value = v
exists = true
break
}
// 不要说golang有泛型了,有些project因为依赖一时半会升不上去还得停在1.16吃屎
// 而且Golang泛型基本不存在类型推导,类型参数都要自己一个个糊上去,代码糊成一坨耙耙
func CloneMapIntInt(map[int]int) map[int]int { ... }
func CloneMapIntString(map[int]string) map[int]string { ... }
...
func CloneMapStringString(map[string]string) map[string]string { ... }
...
import "encoding/json"
func DeepCloneJson(src interface{}, dst interface{}) error { ... }
...
import "reflect"
func DeepCloneReflect(src interface{}) (interface{}, error) { ... }
m := map[A]B {
k1: v1,
k2: v2,
}
if cond1 {
m[x1] = y2
}
if cond2 {
m[x2] = y2
}
而不是
m.entries().first()
func Clone[K Clone, V Clone](m HashMap[K, V]) HashMap[K, V] { ... }
m := EnchancedHashMap[A, B](map[A]B {
k1: v1,
k2: v2,
}).
PutIf(cond, x1, y1).
PutIf(cond, x2, y2)
甚至还有人代码里经常有嵌套的map,你们的Server接口莫不是这样定义的?
func ServeHttp(req: map[string]interface{}) map[string]interface
而且支持泛型,标准库提供HashMap[K, V]并提供一个map糖用来初始化HashMap完全不矛盾。
当然这样就不S & B了。