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 關注
- 180 瀏覽
添加回答
舉報