如果我有一個函數(shù),其中最后一個參數(shù)是可選的,那么使用適當?shù)淖龇?..允許該參數(shù)是可選的還是不正確的形式?例子:func Foo(s ...string) { switch len(s) { case 0: fmt.Println("You didn't pass an argument") case 1: fallthrough default: fmt.Printf("You passed %s\n", s[0]) }}Foo("bar") // "You passed bar"Foo() // "You didn't pass an argument"Foo("bar", "baz") // "You passed bar"在這個例子中,我不在乎是否傳遞了太多的參數(shù),但是我可以default:在需要時處理。
3 回答

繁花不似錦
TA貢獻1851條經驗 獲得超4個贊
我不會推薦這個。(ab)使用可變參數(shù)傳遞可選參數(shù)有不同的問題。其中最重要的可能是后一種形式arg ...T)
僅允許一種類型。對于一個以上具有多個類型的可選參數(shù),可以使用一個參數(shù),...interface{}
但是這會導致不必要的運行時(取消裝箱)成本,并且缺少任何(usefull)編譯時類型檢查。
另一個可能的反對意見是,我認為您不會在標準庫中的任何地方找到該示例/先例,有些人將其視為非正式的Go編碼風格指南。

慕娘9325324
TA貢獻1783條經驗 獲得超4個贊
如果確實需要可選參數(shù)(從Go stdlib中可以看到,這種情況很少見),慣用的方法是為每個可選參數(shù)定義一個帶有字段的結構,然后調用者可以將帶有字段的結構文字傳遞給他們想要填寫。
更常見的是在大多數(shù)情況下只有一個或兩個“可選”參數(shù)時提供替代函數(shù)或方法。
像Python這樣的語言中的可選參數(shù)通常意味著,API會不斷增長,直到函數(shù)和方法具有的參數(shù)超出任何人都無法記住的程度為止,而且永遠不清楚不清楚各種參數(shù)組合如何相互作用(并且甚至未經測試)。
強迫您為各種參數(shù)組合定義顯式函數(shù)和方法需要對API進行更深入的了解,但從長遠來看,它將更加有用和可維護。
- 3 回答
- 0 關注
- 195 瀏覽
添加回答
舉報
0/150
提交
取消