다중 값 반환 함수의 경우 함수를 호출 할 때 결과의 특정 값에 대한 필드 또는 메서드를 참조 할 수 없습니다.
그들 중 하나가 인 경우 error, 그것은 거기의 이유 (기능이 있습니다 실패) 당신은해야 하지 당신이 할 경우 바이 패스, 이후의 코드가 있기 때문에 수도 있습니다 (예 : 런타임 공황의 결과)도 비참하게 실패합니다.
그러나 어떤 상황에서도 코드가 실패하지 않을 것이라는 것을 알고 있는 상황이있을 수 있습니다 . 이러한 경우에는 삭제 (또는 여전히 발생하는 경우 런타임 패닉 발생) 하는 도우미 함수 (또는 메서드)를 제공 할 수 있습니다 error.
코드에서 함수에 대한 입력 값을 제공하고 해당 값이 작동한다는 것을 알고있는 경우에 해당됩니다.
이에 대한 좋은 예는 template및 regexp패키지입니다. 컴파일 타임에 유효한 템플릿 또는 정규 표현식을 제공하면 런타임시 오류없이 항상 구문 분석 할 수 있습니다. 이러한 이유로 template패키지는 Must(t *Template, err error) *Template기능을 regexp제공하고 패키지는 MustCompile(str string) *Regexp기능을 제공합니다 .errors는 의도 된 용도가 입력의 유효성이 보장되는 곳이기 때문입니다.
예 :
// "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]+\]$`)
케이스로 돌아 가기
경우 당신이 확신 할 수 Get()생산하지 않습니다 error특정 입력 값에 대해, 당신은 헬퍼 만들 수 있습니다 Must()을 반환하지 않을 기능을 error하지만 여전히 발생하면 런타임 공황 인상을 :
func Must(i Item, err error) Item {
if err != nil {
panic(err)
}
return i
}
그러나 성공이 확실 할 때 모든 경우에 이것을 사용해서는 안됩니다. 용법:
val := Must(Get(1)).Value
대안 / 단순화
Get()도우미 함수에 호출을 통합하면 더 단순화 할 수도 있습니다 MustGet.
func MustGet(value int) Item {
i, err := Get(value)
if err != nil {
panic(err)
}
return i
}
용법:
val := MustGet(1).Value
흥미로운 / 관련 질문을 참조하십시오.
golang에서 여러 반환을 구문 분석하는 방법
정상 기능에서 Golang의 'ok'와 같은 맵 반환
item일반적으로nil오류가 발생합니다. 먼저 오류를 확인하지 않으면이 경우 코드가 충돌합니다.