-
[golang] channel 구현시 panic 현상 해결 방법(IT)golang+db팁 한방으로 정리 2023. 1. 28. 11:14
채널 : 고루틴간 안전한 데이터 전송을 가능하게 하는 자료 구조
인터페이스 : 타입의 동작을 표현하기 위해 사용
우선 chan 의 예제.
ch := make(chan int) // Goroutine that sends a value to the channel go func() { defer close(ch) ch <- 42 }() // Goroutine that receives a value from the channel go func() { defer func() { if r := recover(); r != nil { fmt.Println("Recovered from panic:", r) } }() for { select { case v, ok := <-ch: if !ok { fmt.Println("Channel closed.") return } fmt.Println("Received value:", v) default: fmt.Println("No value available.") } } }()
Go channel의 panic 현상은 channel 내에서 에러가 발생했을 때 발생합니다. 이를 해결하는 방법으로는 다음과 같은 것들이 있습니다.
- panic이 발생한 함수의 리턴 값에 대한 error handling 추가: panic이 발생한 함수에서 error를 리턴값으로 반환하고, 호출하는 쪽에서 error handling을 적용하는 것이 좋습니다.
- defer recover 사용: defer를 사용하여 recover 함수를 호출하여 panic이 발생할 때 값을 저장하고, panic 상태를 처리할 수 있습니다.
- 고루틴(goroutine)을 감싸는 패턴 사용: 고루틴을 감싸는 패턴을 사용하여 panic이 발생하면 고루틴을 종료하고, 종료 이전에 panic에 대한 정보를 전달할 수 있습니다.
위의 방법 중 가장 적합한 방법을 선택하여 panic 현상을 해결할 수 있습니다.
반응형'(IT)golang+db팁 한방으로 정리' 카테고리의 다른 글
[golang] 형변환 정리 (0) 2023.03.08 [golang] query가 무진장 길때 string 활용 (0) 2023.02.22 [pgadmin] #Error #servermanager #user_info 대응 (0) 2023.01.18 [golang, mariadb] time.RFC3339 포맷을 DB에 넣자 (0) 2023.01.10 [golang] datatime 컬럼 null 일때 체크방법 (0) 2023.01.09