我编写了以下函数,当与Defer
一起使用时肯定会有这个技巧,但是我可以使用标准库中的某些内容吗?我正在寻找类似于Python timeit
的东西,我可以直接在shell中使用它?
package main
import (
"fmt"
"time"
)
func main() {
defer timeTrack(time.Now(), "looptest")
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var m []int
for n := range nums {
if n%2 == 0 {
m = append(m, n)
}
}
}
func timeTrack(start time.Time, name string) {
elapsed := time.Since(start)
fmt.Printf("%s took %s", name, elapsed)
}
答案 0 :(得分:6)
使用Go testing
包。例如,
Java
:
main.go
package main
func doStuff() {
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var m []int
for n := range nums {
if n%2 == 0 {
m = append(m, n)
}
}
}
func main() {
doStuff()
}
:
main_test.go
输出:
package main
import "testing"
func BenchmarkStuff(b *testing.B) {
for i := 0; i < b.N; i++ {
doStuff()
}
}
使用基准测试中的信息,可以提高性能。通过使用估计来初始化切片$ go test -bench=. -benchmem
goos: linux
goarch: amd64
pkg: main
BenchmarkStuff-4 5000000 276 ns/op 120 B/op 4 allocs/op
来减少分配的数量和大小。
m
输出:
func doStuff() {
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
m := make([]int, 0, len(nums)/2+1)
for n := range nums {
if n%2 == 0 {
m = append(m, n)
}
}
}
答案 1 :(得分:4)
您可以使用测试
func BenchmarkFoo(b *testing.B) {
for i := 0; i < b.N; i++ {
Foo()
}
}
答案 2 :(得分:0)
您可以使用“基准” - 方法:
将文件命名为%SOMETHING%_test.go
在其中编写测试,基准测试,示例如下:
var data = JSON.parse(JSON.stringify(myobj))
打开终端并执行以下命令:
for (var key in myobj) {
console.log(myobj[key])
}
您将看到如下输出:
package main
import (
"testing"
)
func fn() {
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var m []int
for n := range nums {
if n%2 == 0 {
m = append(m, n)
}
}
}
func BenchmarkFunc(b *testing.B) {
for i := 0; i < b.N; i++ {
fn()
}
}