第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

...interface{} 函數(shù)參數(shù)中的“取消引用”元素

...interface{} 函數(shù)參數(shù)中的“取消引用”元素

Go
長風(fēng)秋雁 2023-06-05 18:18:57
我有一個(gè)工作正常的記錄器,但在內(nèi)存分配方面會(huì)產(chǎn)生相當(dāng)多的開銷。下面的Debug()函數(shù)不是故意打印的,因?yàn)閘ogOutputLevel不夠高。var logOutputLevel = 2func Debug(s string, args ...interface{}) {    if logOutputLevel > 1 { return }    fmt.Printf(s, args...)}在向它傳遞值時(shí),該方法仍然會(huì)產(chǎn)生相當(dāng)多的分配。將指針傳遞給它時(shí),它不會(huì)產(chǎn)生大量分配。請參閱以下基準(zhǔn):func BenchmarkLog(b *testing.B) {    x := "abc"    for n := 0; n < b.N; n++ {        Debug("test %s", x)    }}func BenchmarkLogRef(b *testing.B) {    x := "abc"    for n := 0; n < b.N; n++ {        Debug("test %s", &x)    }}生產(chǎn):BenchmarkLog-8          50000000            43.1 ns/op        16 B/op          1 allocs/opBenchmarkLogRef-8       500000000            3.17 ns/op        0 B/op          0 allocs/op現(xiàn)在一切都很好,我正在嘗試重新設(shè)計(jì)該Debug()方法以僅接受一個(gè)字符串和無限指針參數(shù)。稍后,fmt.Printf()如果日志級(jí)別足夠高,我想“取消引用”所有參數(shù)并將它們傳遞給。我怎樣才能做到這一點(diǎn)?“僅指針”是否有特定的語言習(xí)語?我假設(shè)這...*interface{}意味著指向 an 的指針interface{}(而不是任何值都應(yīng)該是指針)。
查看完整描述

1 回答

?
波斯汪

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊

阻止分配的唯一方法是首先不進(jìn)行分配。

這通常是通過在評(píng)估之前將調(diào)試語句放在條件塊中來完成的:

if?logOutputLevel?>?1?{
????Debug("test:?%s",?x)
}

這是大多數(shù)日志記錄包處理它的方式。

您可以使用構(gòu)建標(biāo)簽有條件地編譯Debug函數(shù),并完全忽略參數(shù)。語言規(guī)范不能保證不分配,但如果當(dāng)前性能可以接受,編譯器將來可能會(huì)進(jìn)行優(yōu)化。Debug使用兩個(gè)單獨(dú)的文件,您可以在編譯時(shí)在實(shí)現(xiàn)之間切換:

調(diào)試.go

// +build debug


package main


import "log"


func Debug(fmt string, args ...interface{}) {

? ? log.Printf(fmt, args...)

}

發(fā)布.go


// +build !debug


package main


func Debug(_ string, _ ...interface{}) {}


查看完整回答
反對 回復(fù) 2023-06-05
  • 1 回答
  • 0 關(guān)注
  • 143 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)