2 回答
TA贡献1909条经验 获得超7个赞
检查Go 的面向方面编程框架和this。
并查看如何在 Go 中编写基准测试 - Dave Cheney
您可以使用代理函数来执行此操作:
total time: 1.002061047s
total number of requests: 10
number of errors: 0
代理功能:
func (p *metrics) proxy(user func() error) func() error {
return func() error {
p.nCalls++
t0 := time.Now()
err := user()
t := time.Since(t0)
// p.d = append(p.d, t)
p.total += t
if err != nil {
p.nErrs++
}
return err
}
}
全部:
package main
import (
"fmt"
"time"
)
func main() {
m := new(metrics)
f := m.proxy(user)
for i := 0; i < 10; i++ {
f()
}
m.show()
}
func user() error {
time.Sleep(100 * time.Millisecond)
return nil
}
type metrics struct {
nCalls, nErrs int
total time.Duration
// d []time.Duration
}
func (p *metrics) proxy(user func() error) func() error {
return func() error {
p.nCalls++
t0 := time.Now()
err := user()
t := time.Since(t0)
// p.d = append(p.d, t)
p.total += t
if err != nil {
p.nErrs++
}
return err
}
}
func (p *metrics) show() {
fmt.Println("total time:", p.total)
fmt.Println("total number of requests:", p.nCalls)
fmt.Println("number of errors:", p.nErrs)
}
TA贡献2036条经验 获得超8个赞
在 Go[...] 中是否有类似的方法来实现这一点?
不。
您必须编写一个包装器来手动拦截输入、分析输出并测量时间。
(请注意,如果语言只是“Go”,则名称。golang.org 是网站。)
- 2 回答
- 0 关注
- 134 浏览
添加回答
举报