UUID v7 Must
最近用到 Go 官方 uuid 庫產生 UUID v7 時候留意到一種使用方式是:Must,他的描述也很簡單:
Must returns uuid if err is nil and panics otherwise.
func Must(uuid UUID, err error) UUID { if err != nil { panic(err) } return uuid}用途是「當錯誤不是一個可以恢復的選項時」,使用包裝好的 Must 直接 panic 錯誤。
// Beforeid, err := uuid.NewV7()if err != nil { log.Fatalf("failed to generate UUID v7: %v", err)}
// AftermustId := uuid.Must(uuid.NewV7())總結
Must 是 Go 生態的一種慣例用來操作當場 panic 也合理的數值
var ( validEmail = regexp.MustCompile(`^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$`) validID = regexp.MustCompile(`^[a-z]+\[[0-9]+\]$`))
func init() { templates = template.Must(template.ParseGlob("templates/*.html"))}- 適合:初始化階段(
init()、main()開頭、全域變數初始化),這時 panic 等同於啟動失敗,Fatal 終止整個程式是合理的。 - 不適合:在 HTTP handler、goroutine 裡或使用者請求的處理路徑中,panic 會導致整個服務崩潰或 recover 邏輯複雜化。