-1
我試圖在Go中創建一個用於重試任何失敗查詢函數的函數(通常是因爲序列化問題)。在Go中傳遞函數作爲參數
func retryer(functionA func(interface{}) (interface{}, []error), maxRetry int, waitBetween time.Duration) interface{} {
//when no error in functionA, retryer returns whatever functionA returns
//when maxRetry is reached, returns nil
}
我要重新被這個樣子
func GetTopStudent(classId string) ([]Student, []error) {
//queries top 10 students for class with classId
}
func GetAverageStudentScores(classId string, from time.Time, until time.Time) ([]Pair, []error) {
//queries all average score using aggregate, grouping by studentId
//Pair behaves like C++ pair<string,string>
}
但功能,結果是一個編譯錯誤
cannot use GetTopStudent (type func(string) ([]Student, []error)) as type func(interface{}) (interface {}, []error) in argument to retryer
我試圖修改它一點,我得到另一個編譯錯誤
cannot use GetTopStudent (type func(string) ([]Student, []error)) as type func(string) (interface {}, []error) in argument to retryer
任何人都可以幫助我創建一個通用函數來包裝一個函數來重試錯誤?
作爲參數傳遞的函數的簽名必須函數的簽名相匹配精確的參數類型。您必須重寫您傳遞給'interface {}'的函數,並將它們轉換爲這些函數內的適當類型。 – xunatai
這樣,對於N個函數,我需要N個包裝。我需要通用函數包裝來大大簡化我的代碼。 – Kuzunoha
是的。或重新設計。 – Volker