我有方法,看起來像這樣:函數,返回結構或錯誤
var eventNotDetected = errors.New("Event not detected")
type VoucherUsageEvent struct {
M models.M
}
func detectVoucherUsageEvent(_ uint64, changeset changelog.Changeset) (VoucherUsageEvent, error) {
var event VoucherUsageEvent
if changeset.GetHeader().Table != db.TABLE_NAME {
return event, eventNotDetected
}
switch changeset.(type) {
case changelog.InsertChangeset, changelog.UpdateChangeset:
m, err := models.Map(changeset)
if err != nil {
return event, err
}
return VoucherUsageEvent{m}, nil
default:
return event, eventNotDetected
}
}
的想法是,它可以返回一個對象實例與否,取決於輸入。如果對象實例不能返回,函數應該指出爲什麼它不能被返回(在映射期間發生錯誤,或者只是未找到)
當函數沒有返回時,返回簽名有點奇怪實例,例如:
return event, eventNotDetected
return event, err
基本上我只是用event
因爲我不能只返回零。
或者是更好的辦法,只是返回在這種情況下的參考,這樣我就可以恢復的情況下更改爲:爲指針*VoucherUsageEvent
return nil, eventNotDetected
return nil, err
如果僅* *理由你會返回一個指針,而不是零值,是因爲你不喜歡的收益語義,只需返回零值。指針和值之間的決定不應僅僅基於返回語句的外觀。 – Adrian
最後,我返回了一個接口,它可以返回零,並使指針消失。 – Max