[go] 비동기 에러 처리

비동기 프로그래밍은 오류를 다루기 어려울 수 있습니다. 그러나 간단한 패턴을 따르면 비동기 코드에서 발생하는 오류를 처리하는 것이 쉬워집니다. Go 언어의 경우, 아래와 같은 패턴을 사용하여 비동기 에러를 처리할 수 있습니다.

error 타입 활용

Go 언어에서는 error 타입을 사용하여 함수에서 발생하는 오류를 반환합니다. 비동기 함수 내에서 오류가 발생하는 경우, 해당 오류를 error 타입으로 반환할 수 있습니다. 예를 들어, 파일을 읽는 비동기 함수는 다음과 같이 작성될 수 있습니다.

import (
	"io/ioutil"
)

func readFile(filename string) ([]byte, error) {
	data, err := ioutil.ReadFile(filename)
	if err != nil {
		return nil, err
	}
	return data, nil
}

오류 처리

비동기 함수를 호출할 때는 항상 반환된 오류를 확인하는 것이 중요합니다. 아래는 오류를 처리하는 예제 코드입니다.

func main() {
	data, err := readFile("example.txt")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println(string(data))
}

goroutine 내의 오류 처리

goroutine 내에서 발생하는 오류를 처리하는 것도 중요합니다. 아래의 예제는 goroutine을 사용하여 비동기 작업을 수행하고, 해당 작업에서 발생하는 오류를 처리하는 방법을 보여줍니다.

func main() {
	result := make(chan int)
	errCh := make(chan error)

	go func() {
		// 비동기 작업 수행
		err := doSomeWork()
		if err != nil {
			errCh <- err
			return
		}
		result <- 1
	}()

	select {
	case res := <-result:
		fmt.Println("Result:", res)
	case err := <-errCh:
		fmt.Println("Error:", err)
	}
}

결론

비동기 코드에서의 오류 처리는 중요한 부분이며, Go 언어에서는 error 타입을 활용하여 비동기 함수에서 발생하는 오류를 쉽게 처리할 수 있습니다. 항상 비동기 함수를 호출할 때는 반환된 오류를 확인하는 것을 잊지 말아야 합니다.