Go1.13 errors 패키지 사용법

7775 단어 go1.13errorsUnwrapGo

Go1.13 errors 패키지 사용법


go 1.13에 errors 패키지가 추가되었습니다. 주로 다음과 같습니다.
  • As
  • Is
  • New
  • Unwrap

  • 정의


    As(err error, target interface{}) bool


    err의 체인에서 목표와 일치하는 첫 번째 오류를 찾았습니다. 만약에true를 되돌려줍니다. 그렇지 않으면false를 되돌려줍니다.

    Is(err error, target error) bool


    두 오류가 동일한지 판단합니다.

    New(text string) error


    새로운 error 대상을 되돌려줍니다. 내용이 같아도 두 개의 다른 대상입니다.

    Unwarp(err error) error


    만약 전송된 err 대상에 있다면%w 키워드의 포맷 클래스는 반환값에서 이 원시 error를 해석합니다. 다중 플러그인은 첫 번째 것만 되돌려줍니다. 그렇지 않으면nil로 되돌려줍니다.

    예제 코드

    package main
    
    import (
    	"errors"
    	"fmt"
    	"os"
    )
    
    func main() {
    	// As
    	fmt.Println("-------As--------")
    	if _, err := os.Open("non-existing"); err != nil {
    		var pathError *os.PathError
    		if errors.As(err, &pathError) {
    			fmt.Println("Failed at path:", pathError.Path)
    		} else {
    			fmt.Println(err)
    		}
    	}
    
    	// New
    	fmt.Println("-------New--------")
    	err1 := errors.New("error1")
    	err2 := errors.New("error2")
    
    	// Is
    	fmt.Println("-------Is--------")
    	fmt.Println(errors.Is(err1, err2))
    	fmt.Println(errors.Is(err1, errors.New("error1")))
    
    	// Unwrap
    	fmt.Println("-------Unwrap--------")
    	e := errors.New("e")
    	e1 := fmt.Errorf("e1: %w", e)
    	e2 := fmt.Errorf("e2: %w", e1)
    	fmt.Println(e2)
    	fmt.Println(errors.Unwrap(e2))
    	fmt.Println(e1)
    	fmt.Println(errors.Unwrap(e1))
    }
    

    실행 결과:
    # champly @ champlydeiMac in ~/go/src/demo/error [10:06:10]
    $ go run errors.go
    -------As--------
    Failed at path: non-existing
    -------New--------
    -------Is--------
    false
    false
    -------Unwrap--------
    e2: e1: e
    e1: e
    e1: e
    e
    

    좋은 웹페이지 즐겨찾기