我有一個(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)該是指針)。
...interface{} 函數(shù)參數(shù)中的“取消引用”元素
長風(fēng)秋雁
2023-06-05 18:18:57