go 이상 처리

1669 단어

error


인터페이스 선언은 다음과 같습니다.
type error interface {
    Error() string
}

오류 생성


err:=errors.New ("") //는 반환된 error 형식 값의 문자열 표현 형식을 반환합니다.

func New(text string) error {
    return &errorString{text}
}

err2:=fmt.Errorf("%s","A Error")

// , error , 
// 
func Errorf(format string, a ...interface{}) error {
    return errors.New(Sprintf(format, a...))
}

panic


panic 함수는 현재 제어 프로세스 (Groutine) 의 실행을 멈추고 실행 시 공황을 보고하는 데 사용됩니다.그것은 임의의 유형의 매개 변수를 받아들일 수 있다.그러나 이 매개 변수는 일반적으로string 형식 값이나error 형식 값입니다.
panic(errors.New("A error"))

recover


실행 중 공황이 발생하면 프로그램이 붕괴될 때까지 호출 방법으로 전달됩니다.이것은 당연히 우리가 만나고 싶은 것이 아니다. 왜냐하면 누구도 프로그램이 아무런 운행시 문제가 발생하지 않을 것이라고 보장할 수 없기 때문이다.그러나 Go 언어는 "차단"실행 시 당황하는 함수인 Recover를 제공합니다.
그러나 이 키 함수만 가지고는 공황을 차단하기에는 부족하다.실행 중 공황으로 인해 프로그램이 프로세스 제어권을 잃어버려서 코드를 공황 후에 실행할 수 없습니다.그러나 예외: defer 문장
defer func() {
    if r:=recover();r!=nil{
        fmt.Printf("Recover panice %s
",r) } }()

인터넷의try/catch

package main

import (
    "reflect"
)

type TryCatch struct {
    errChan      chan interface{}
    catches      map[reflect.Type]func(err error)
    defaultCatch func(err error)
}

func (t TryCatch) Try(block func()) TryCatch {
    t.errChan = make(chan interface{})
    t.catches = map[reflect.Type]func(err error){}
    t.defaultCatch = func(err error) {}
    go func() {
        defer func() {
            t.errChan 

좋은 웹페이지 즐겨찾기