최고의 오류 처리로 이동 튜토리얼 2024년, 이 튜토리얼에서는 오류 처리로 이동를 배울 수 있습니다.
언어는 내장 에러 인터페이스를 통해 매우 간단한 오류 처리 메커니즘을 제공 간다.
오류 유형은 정의입니다 인터페이스 유형이다 :
type error interface { Error() string }
우리는 코드의 에러 메시지를 생성하는 에러 인터페이스 타입을 구현할 수있다.
기능은 일반적으로 반환 값의 단부에 에러 메시지를 리턴한다. 사용 errors.New는 오류 메시지를 반환합니다 :
func Sqrt(f float64) (float64, error) { if f < 0 { return 0, errors.New("math: square root of negative number") } // 实现 }
음수를 통과 할 때 다음의 예에서 우리는 다음 오류 객체가이 객체 전무에 비해 비 무기 호입니다 얻을의 SQRT 전화, 결과는 fmt.Println (FMT 패키지 있도록 오류를 처리 할 때, 사실 ) 메서드 호출된다 오류가 출력 오류라고하며, 다음 샘플 코드 호출을 참조하십시오
result, err:= Sqrt(-1) if err != nil { fmt.Println(err) }
package main import ( "fmt" ) // 定义一个 DivideError 结构 type DivideError struct { dividee int divider int } // 实现 `error` 接口 func (de *DivideError) Error() string { strFormat := ` Cannot proceed, the divider is zero. dividee: %d divider: 0 ` return fmt.Sprintf(strFormat, de.dividee) } // 定义 `int` 类型除法运算的函数 func Divide(varDividee int, varDivider int) (result int, errorMsg string) { if varDivider == 0 { dData := DivideError{ dividee: varDividee, divider: varDivider, } errorMsg = dData.Error() return } else { return varDividee / varDivider, "" } } func main() { // 正常情况 if result, errorMsg := Divide(100, 10); errorMsg == "" { fmt.Println("100/10 = ", result) } // 当被除数为零的时候会返回错误信息 if _, errorMsg := Divide(100, 0); errorMsg != "" { fmt.Println("errorMsg is: ", errorMsg) } }
위의 프로그램은 출력은 다음과 같습니다
100/10 = 10 errorMsg is: Cannot proceed, the divider is zero. dividee: 100 divider: 0