2 回答
TA贡献1785条经验 获得超4个赞
一般sort.Slice()
和sort.SliceStable()
功能适用于任何切片。您必须将切片值作为interface{}
值传递,并且实现必须使用反射(reflect
包)来访问其元素和长度,并执行元素交换。
相反,当你sort.Interface
自己实现类型时,在你的实现中你可以访问你的切片的静态类型,并且你可以提供没有sort.Interface
反射的实现,这将使它更快。
因此,如果性能很关键/很重要,请始终sort.Interface
自己提供实现。如果切片很小或性能不重要,您可以使用更方便的sort.Slice()
功能。
TA贡献1801条经验 获得超8个赞
添加带有分配的运行输出看起来接口/结构方法也更好。
❯ go version
go version go1.17.1 darwin/amd64
❯ go test -bench=. -benchmem
goos: darwin
goarch: amd64
pkg: github.com/timescale/promscale/pkg/api/parser/json/test
cpu: Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz
BenchmarkSlice-12 3533616 319.6 ns/op 88 B/op 3 allocs/op
BenchmarkStruct-12 9157018 126.0 ns/op 24 B/op 1 allocs/op
BenchmarkSlicePointers-12 6643446 167.1 ns/op 56 B/op 2 allocs/op
BenchmarkStructOfSlicePointers-12 9004021 124.1 ns/op 24 B/op 1 allocs/op
PASS
ok github.com/timescale/promscale/pkg/api/parser/json/test 5.425s
- 2 回答
- 0 关注
- 159 浏览
添加回答
举报