package crumbs // Deep version of [slices.Clone]. Nil is preserved. func DeepClone[S ~[]E, E interface{Clone() E}](s S) S { // NOTE(jfrech): 2024-05-25 [slices.Clone]'s documentation doesn't explicitly mention it, but its go1.22.3 implementation appears to preserve "nil". if s == nil { return nil } clone := make(S, len(s)) for j := range s { clone[j] = s[j].Clone() } return clone }