2 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以編寫一個(gè)可變參數(shù)函數(shù)(請參閱函數(shù)類型),它將任意數(shù)量的ints 作為參數(shù)(零或更多)并一次性處理它們。例如
func (d Database) Select(ctx context.Context, numbers ...int)
numbers您可以在for 循環(huán)中迭代range并執(zhí)行您想要的操作。您的函數(shù)調(diào)用可以保持與以前相同。
fetched, err := c.db.Select(ctx, one)
fetched, err := c.db.Select(ctx, one, two)
fetched, err := c.db.Select(ctx, one, two, three)

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
您在評論中提到參數(shù)類型有所不同。
一般來說,您可以這樣做:
在編譯時(shí),或
在運(yùn)行時(shí)。
運(yùn)行時(shí)版本更易于編碼和使用,并且非常靈活,但當(dāng)然有一些運(yùn)行時(shí)成本。也許您正試圖避免這種情況(這很好,但會(huì)讓人想起關(guān)于在優(yōu)化之前進(jìn)行測量的古老格言)。
編譯時(shí)版本是您在示例中編寫的。
我怎樣才能重寫它以便樣板消失?
對于 Go 1,只有一種方法可以做到這一點(diǎn):編寫程序來編寫程序。?? 這就是go generate
全部。還有一篇關(guān)于它的Go 博客文章。
在 Go 2 中,幾乎肯定會(huì)有泛型,你實(shí)際上可以稍微玩一下。他們將是做你想做的事的方式。
- 2 回答
- 0 關(guān)注
- 130 瀏覽
添加回答
舉報(bào)