Ç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 template
ve regexp
paketleridir: 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 template
paket Must(t *Template, err error) *Template
işlevi sağlar ve regexp
paket MustCompile(str string) *Regexp
işlevi sağlar: geri dönmezlererror
s çü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 error
belirli giriş değerleri için, bir yardımcı oluşturabilir Must()
dönmek olmaz işlevini error
ama 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
item
tipik olaraknil
bir hata durumunda olacaktır . Önce bir hatayı kontrol etmezseniz, bu durumda kodunuz çökecektir.