雖然Go 語言允許使用不帶參數的可變參數函數,但可能需要防止這種情況,將它們視為呼叫者程式碼中的潛在錯誤。但是,該語言並不直接支援將其作為編譯時錯誤來實現。
要克服此限制,您可以修改函數的簽章以包含非可變參數和可變參數。這種方法確保在函數呼叫期間至少提供一個參數。例如:
func min(first int, rest ...int) int { // Implement your logic here return 0 }
使用此簽名,可以如下呼叫 min函數:
min(1) // Valid min(1, 2) // Valid min(1, 2, -3) // Valid
但是,嘗試在不使用此簽章的情況下呼叫該函數任何參數都會導致編譯時錯誤:
min() // Error: not enough arguments in call to min
如果您需要至少提供兩個參數,則可以進一步修改函數簽章:
func min(first, second int, rest ...int) int { // Implement your logic here return 0 }
雖然此技術有效地強制執行該規定對於至少一個參數,權衡利弊很重要。具體來說,處理具有預定義切片的函數可以在呼叫程式碼中引入額外的步驟,如下所示:
s := []int{1, 2, -3} fmt.Println(min(s[0], s[1:]...))
如果修改函數簽章不可行,則運行時恐慌或退出機制可用於處理未提供參數的情況。但是,這種方法無法阻止編譯,並且依賴執行階段的正確處理。
以上是如何在 Go 的可變參數函數中強制執行參數合規性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!