亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Go 中使用/實現切面方向?

如何在 Go 中使用/實現切面方向?

Go
守著星空守著你 2023-08-07 15:17:34
我想監視任意方法調用,并且我對方法調用的 3 個指標感興趣:總時間請求總數錯誤總數在Java中,我可以定義一個注釋,在方法調用之前和之后注入指標初始化和計算。例如:@Monitor public void foo() {    // do some stuff...    }該@Monitor注釋將在 之前和之后注入一些代碼foo以為其生成指標。Go 中是否有類似的方法來實現這一目標?
查看完整描述

2 回答

?
jeck貓

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)

}


查看完整回答
反對 回復 2023-08-07
?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

在 Go[...] 中是否有類似的方法來實現這一點?

不。

您必須編寫一個包裝器來手動攔截輸入、分析輸出并測量時間。

(請注意,如果語言只是“Go”,則名稱。golang.org 是網站。)


查看完整回答
反對 回復 2023-08-07
  • 2 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號