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 關注
- 202 瀏覽
添加回答
舉報