Go学习之Benchmark
Posted martinue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go学习之Benchmark相关的知识,希望对你有一定的参考价值。
package main
import (
"testing"
)
func add(x, y int) int {
return x + y
}
func BenchmarkAdd(b *testing.B) {
//println("B.N=", b.N)
for i := 0; i < b.N; i++ {
_ = add(1, 2)
}
}
type DataAdd interface {
Add() int
}
type Data struct {
a, b int
}
func (d Data) Add() int {
return d.a + d.b
}
func add1(a DataAdd) int {
return a.Add()
}
func BenchmarkInterfaceAdd(b *testing.B) {
//println("B.N=", b.N)
x := Data{1, 2}
for i := 0; i < b.N; i++ {
_ = add1(x)
}
}
func add2(x, y interface{}) int {
return x.(int) + y.(int)
}
func BenchmarkInterfaceAddEmp(b *testing.B) {
//println("B.N=", b.N)
for i := 0; i < b.N; i++ {
_ = add2(1, 2)
}
}
使用命令:
go test -bench .
结论是:
goos: darwin
goarch: amd64
BenchmarkAdd-12 1000000000 0.256 ns/op
BenchmarkInterfaceAdd-12 47876229 21.2 ns/op
BenchmarkInterfaceAddEmp-12 1000000000 0.252 ns/op
PASS
ok _/Users/bytedance/Desktop 1.649s
这么看起来接口转换的成本还是有一些高…
以上是关于Go学习之Benchmark的主要内容,如果未能解决你的问题,请参考以下文章