İçeriğe geç

Verimsiz Üyelik Testi (ARCH5075)

Anahtar go.performance.inefficient-membership-test · Önem warning · Kategori performance

Bir slice’a karşı tekrar tekrar üyelik kontrolü her seferinde O(n) tarama yapar. Özellikle döngü içinde, üyelik için bir map[T]struct{} kullanarak O(1) arama sağlayın.

func selectAllowed(items, allowed []string) []string {
var out []string
for _, item := range items {
for _, a := range allowed {
if item == a {
out = append(out, item)
}
}
}
return out
}
func selectAllowed(items, allowed []string) []string {
set := make(map[string]struct{}, len(allowed))
for _, a := range allowed {
set[a] = struct{}{}
}
var out []string
for _, item := range items {
if _, ok := set[item]; ok {
out = append(out, item)
}
}
return out
}

Tekrarlı üyelik kontrollerinde slice taraması yerine map kullanın.