다중 값 반환 함수의 경우 함수를 호출 할 때 결과의 특정 값에 대한 필드 또는 메서드를 참조 할 수 없습니다.
그들 중 하나가 인 경우 error
, 그것은 거기의 이유 (기능이 있습니다 실패) 당신은해야 하지 당신이 할 경우 바이 패스, 이후의 코드가 있기 때문에 수도 있습니다 (예 : 런타임 공황의 결과)도 비참하게 실패합니다.
그러나 어떤 상황에서도 코드가 실패하지 않을 것이라는 것을 알고 있는 상황이있을 수 있습니다 . 이러한 경우에는 삭제 (또는 여전히 발생하는 경우 런타임 패닉 발생) 하는 도우미 함수 (또는 메서드)를 제공 할 수 있습니다 error
.
코드에서 함수에 대한 입력 값을 제공하고 해당 값이 작동한다는 것을 알고있는 경우에 해당됩니다.
이에 대한 좋은 예는 template
및 regexp
패키지입니다. 컴파일 타임에 유효한 템플릿 또는 정규 표현식을 제공하면 런타임시 오류없이 항상 구문 분석 할 수 있습니다. 이러한 이유로 template
패키지는 Must(t *Template, err error) *Template
기능을 regexp
제공하고 패키지는 MustCompile(str string) *Regexp
기능을 제공합니다 .error
s는 의도 된 용도가 입력의 유효성이 보장되는 곳이기 때문입니다.
예 :
// "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
오류가 발생합니다. 먼저 오류를 확인하지 않으면이 경우 코드가 충돌합니다.