59 lines
859 B
Go
59 lines
859 B
Go
package main
|
|
|
|
import "testing"
|
|
|
|
// go test -bench=. -benchmem performance_test.go
|
|
|
|
type ValueInterface interface {
|
|
Add() int
|
|
}
|
|
|
|
type Value struct {
|
|
number int
|
|
}
|
|
|
|
//go:noinline
|
|
func (v Value) Add() int {
|
|
return v.number + v.number
|
|
}
|
|
|
|
type Value2 struct {
|
|
number int
|
|
}
|
|
|
|
//go:noinline
|
|
func (v Value2) Add() int {
|
|
return v.number + v.number
|
|
}
|
|
|
|
var Result int
|
|
|
|
func Get(index int) ValueInterface {
|
|
if index == 0 {
|
|
return Value{}
|
|
} else {
|
|
return Value2{}
|
|
}
|
|
}
|
|
|
|
func BenchmarkDirect(b *testing.B) {
|
|
var value Value
|
|
for i := 0; i < b.N; i++ {
|
|
Result = value.Add()
|
|
}
|
|
}
|
|
|
|
func BenchmarkWithInterface1(b *testing.B) {
|
|
var iface ValueInterface = Get(0)
|
|
for i := 0; i < b.N; i++ {
|
|
Result = iface.Add()
|
|
}
|
|
}
|
|
|
|
func BenchmarkWithInterface2(b *testing.B) {
|
|
var iface ValueInterface = Get(1)
|
|
for i := 0; i < b.N; i++ {
|
|
Result = iface.(Value2).Add()
|
|
}
|
|
}
|