假设 Go 映射是 ~O(1),这里是一个 ~O(n) 差异函数,适用于未排序的切片。// difference returns the elements in `a` that aren't in `b`.func difference(a, b []string) []string { mb := make(map[string]struct{}, len(b)) for _, x := range b { mb[x] = struct{}{} } var diff []string for _, x := range a { if _, found := mb[x]; !found { diff = append(diff, x) } } return diff}