Ich habe eine Funktion, die eine zufällige int64
und gibt es als interface{}
wie folgt erzeugt:zusätzliche Zuweisung, wenn Schnittstelle Rückkehr {} statt int64
func Val1(rnd rand.Source) interface{} {
return rnd.Int63()
}
jetzt diese Funktion betrachten, die tut das Gleiche, aber kehrt ein int64
func Val2(rnd rand.Source) int64 {
return rnd.Int63()
}
gebenchmarkt ich die beiden Funktionen mit diesem (go test -bench=. -benchmem
):
func BenchmarkVal1(b *testing.B) {
var rnd = rand.NewSource(time.Now().UnixNano())
for n := 0; n < b.N; n++ {
Val1(rnd)
}
}
func BenchmarkVal2(b *testing.B) {
var rnd = rand.NewSource(time.Now().UnixNano())
for n := 0; n < b.N; n++ {
Val2(rnd)
}
}
und bekam Folowing Ergebnisse:
BenchmarkVal1-4 50000000 32.4 ns/op 8 B/op 1 allocs/op
BenchmarkVal2-4 200000000 7.47 ns/op 0 B/op 0 allocs/op
Wo kommt die zusätzliche Zuteilung in Val1()
kommen aus? Kann es vermieden werden, wenn eine interface{}
zurückgegeben wird?
wie immer @icza Sie Ihr Gewicht in Gold wert sind –