Çok değerli bir dönüş işlevi durumunda, işlevi çağırırken sonucun belirli bir değerinin alanlarına veya yöntemlerine başvuramazsınız.
Ve bunlardan biri bir ise error, bir destekleyen bir doktor nedenle (işlevdir olabilir başarısız) ile gerektiği değil bunu yaparsanız bunun baypas, sonraki kod çünkü olabilir (örneğin çalışma zamanı panik ile sonuçlanan) da sefil başarısız.
Ancak , kodun hiçbir durumda başarısız olmayacağını bildiğiniz durumlar olabilir. Bu durumlarda, bir yardımcı işlev (veya yöntem) sağlayabilirsiniz; bu, bunu ortadan kaldırır error(veya hala devam ederse çalışma zamanı paniği yaratır).
Bir işlev için giriş değerlerini koddan sağlarsanız ve bunların çalıştığını biliyorsanız bu durum söz konusu olabilir.
Bunun harika örnekleri templateve regexppaketleridir: derleme zamanında geçerli bir şablon veya regexp sağlarsanız, bunların çalışma zamanında her zaman hatasız olarak ayrıştırılabileceğinden emin olabilirsiniz. Bu nedenle templatepaket Must(t *Template, err error) *Templateişlevi sağlar ve regexppaket MustCompile(str string) *Regexpişlevi sağlar: geri dönmezlererrors çünkü bunların amaçlanan kullanımı, girdinin geçerli olmasının garanti edildiği yerdir.
Örnekler:
// "text" is a valid template, parsing it will not fail
var t = template.Must(template.New("name").Parse("text"))
// `^[a-z]+\[[0-9]+\]$` is a valid regexp, always compiles
var validID = regexp.MustCompile(`^[a-z]+\[[0-9]+\]$`)
Davanıza geri dönün
EĞER belli olabiliyor Get()üretmek olmayacak errorbelirli giriş değerleri için, bir yardımcı oluşturabilir Must()dönmek olmaz işlevini errorama yine oluşursa bir çalışma zamanı panik yükseltmek:
func Must(i Item, err error) Item {
if err != nil {
panic(err)
}
return i
}
Ancak bunu başarılı olacağından emin olduğunuzda her durumda kullanmamalısınız. Kullanım:
val := Must(Get(1)).Value
Alternatif / Basitleştirme
Get()Aramayı yardımcı işlevinize dahil ederseniz daha da basitleştirebilirsiniz , hadi onu arayalım MustGet:
func MustGet(value int) Item {
i, err := Get(value)
if err != nil {
panic(err)
}
return i
}
Kullanım:
val := MustGet(1).Value
Bazı ilginç / ilgili sorulara bakın:
golang'da birden fazla getiri nasıl ayrıştırılır
Golang'da normal işlevlerde 'tamam' gibi haritaya dön
itemtipik olaraknilbir hata durumunda olacaktır . Önce bir hatayı kontrol etmezseniz, bu durumda kodunuz çökecektir.