Golang에서 선택문을 사용할 때 알아야 할 사례

Go 언어에서 select 문은 switch 문과 유사 하지만, select 문에서는 case 문이 통신, 즉 채널에서 전송 또는 수신 작업을 참조합니다.

Golang에서 선택문을 사용할 때 알아야 할 사례

통사론:

select{

case SendOrReceive1: // Lệnh
case SendOrReceive2: // Lệnh
case SendOrReceive3: // Lệnh
.......
default: // Lệnh

이 글에서는 기본 케이스를 사용하여 교착 상태를 피하는 방법을 알아보겠습니다. 하지만 먼저, Golang select 명령을 사용할 때 교착 상태가 발생하는 경우를 알아보겠습니다 .

Golang에서 교착 상태에 대해 알아야 할 사항

교착 상태: 채널에서 데이터를 읽거나 쓰려고 하지만 채널이 비어 있는 경우입니다. 따라서 고루틴의 현재 실행을 차단하고 다른 고루틴에 제어권을 넘기지만, 이 상황으로 인해 다른 고루틴을 사용할 수 없거나 다른 고루틴이 휴식 중이면 프로그램이 충돌합니다. 이런 현상을 교착상태라고 합니다. 아래 예에서 보듯이:

예를 들어:

// Chương trình Go minh hoạc
// cách deadlock phát sinh
package main 

// Hàm chính
func main() { 

	// Tạo một kênh
	// Deadlock phát sinh bởi
	// không có goroutine đang viết
	// vào kênh này, vì thế
	// lệnh select đã bị khóa mãi mãi
	c := make(chan int) 
	select { 
	case <-c: }="" }="">

결과:

fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan receive]:
main.main()

이런 상황을 피하기 위해 select 문에서 기본 케이스를 사용합니다. 즉, 프로그램에서 교착 상태가 발생하면 select 문의 기본 케이스가 실행되어 교착 상태를 방지합니다. 아래 예와 같이, 교착 상태를 피하기 위해 select 문에서 default 케이스를 사용합니다.

예를 들어:

// Chương trình Go minh họa cách giải quyết
// vấn đề deadlock bằng case mặc định
package main 

import "fmt"

// Hàm chính
func main() { 

	// Tạo 1 kênh
	c := make(chan int) 
	select { 
	case <-c: default:="" fmt.println("!..="" default="" case..!")="" }="" }="">

결과:

!.. Default case..!

select 문에 nil 채널 만 있는 경우에도 기본 케이스를 사용할 수 있습니다 . 아래 예에서 보듯이 채널 c는 nil이므로, 여기의 기본 케이스를 사용할 수 없으면 기본 케이스가 실행되고, 그러면 프로그램은 영원히 차단되고 교착 상태가 발생합니다.

예를 들어:

// Chương trình Go minh họa
// chạy case mặc định
package main 

import "fmt"

// Hàm chính
func main() { 

	// Tạo một kênh
	var c chan int

	select { 
	case x1 := <-c: fmt.println("value:="" ",="" x1)="" default:="" fmt.println("default="" case..!")="" }="" }="">

결과:

Default case..!

댓글 남기기

평택에서 폐건전지 버리는 방법: 수거함 찾기부터 안전 배출까지

평택에서 폐건전지 버리는 방법: 수거함 찾기부터 안전 배출까지

평택에서 폐건전지를 버리는 순서와 가까운 전용 수거함 찾는 법을 안내합니다. 건전지 분리·보관, 손상된 리튬전지 주의사항, 교환 여부 확인법도 살펴보세요.

서울에서 부탄가스통 버리는 방법: 잔량 확인부터 캔류 배출까지

서울에서 부탄가스통 버리는 방법: 잔량 확인부터 캔류 배출까지

서울에서 부탄가스통을 버리는 방법을 정리했습니다. 완전 소진 여부, 구멍을 뚫기 전 안전 확인, 캔류 배출과 자치구별 문의 방법을 안내합니다.

서울에서 냉장고 버리는 방법: 무료 방문수거·새 제품 회수·구청 신고 비교

서울에서 냉장고 버리는 방법: 무료 방문수거·새 제품 회수·구청 신고 비교

서울에서 냉장고를 버리는 방법을 비교합니다. 무상방문수거 예약, 새 냉장고 구매 시 회수, 구청 대형폐기물 신고의 조건과 준비 사항을 확인하세요.

평택에서 형광등 버리는 방법: 전용 수거함 확인과 안전한 배출 요령

평택에서 형광등 버리는 방법: 전용 수거함 확인과 안전한 배출 요령

평택에서 폐형광등을 버리는 방법을 정리했습니다. 아파트 수거함과 행정복지센터 확인법, 안전한 포장, 깨진 형광등과 LED 구분까지 안내합니다.

안양에서 폐건전지 버리는 방법: 수거함 위치 확인부터 안전한 배출까지

안양에서 폐건전지 버리는 방법: 수거함 위치 확인부터 안전한 배출까지

안양에서 폐건전지를 올바르게 버리는 방법을 정리했습니다. 단독주택·공동주택 배출처, 전용수거함 이용법, 내장형 배터리 제품 구분과 화재 예방 주의사항을 확인하세요.

부산에서 자전거 버리는 방법: 재사용, 대형폐기물 신고와 비용 비교

부산에서 자전거 버리는 방법: 재사용, 대형폐기물 신고와 비용 비교

부산에서 자전거 버리는 방법을 비교합니다. 판매·나눔과 대형폐기물 신고, 구·군별 수수료, 온라인·전화 접수, 배출 전 체크리스트를 확인하세요.

고양에서 폐건전지 버리는 방법: 수거함 위치와 안전한 분리배출

고양에서 폐건전지 버리는 방법: 수거함 위치와 안전한 분리배출

고양에서 폐건전지를 버릴 때 수거함을 찾는 순서와 일반 건전지, 보조배터리, 부푼 리튬 배터리의 안전한 배출 방법을 정리했습니다.

서울 종량제봉투 가격과 판매처 확인 방법: 2026년 기준 실용 가이드

서울 종량제봉투 가격과 판매처 확인 방법: 2026년 기준 실용 가이드

서울 종량제봉투 가격과 지정 판매처를 정확히 확인하는 방법을 정리했습니다. 10L·20L·50L 가격, 자치구별 확인법, 판매점 찾기와 규격 선택 기준을 2026년 공식 자료로 안내합니다.

화성에서 컴퓨터 버리는 방법: 무료 폐가전 수거부터 대형폐기물 신고까지

화성에서 컴퓨터 버리는 방법: 무료 폐가전 수거부터 대형폐기물 신고까지

화성에서 데스크톱, 모니터, 노트북을 버리는 방법을 정리했습니다. 개인정보 삭제, 폐가전 무상방문수거 조건, 대형폐기물 신고, 배출 전 체크리스트까지 확인하세요.

안산에서 스프레이캔 버리는 방법: 가스 제거부터 캔류 배출까지

안산에서 스프레이캔 버리는 방법: 가스 제거부터 캔류 배출까지

안산시 기준으로 스프레이캔·에어졸캔을 안전하게 비우고 캔류로 분리배출하는 방법을 정리했습니다. 일반주택과 공동주택의 배출 차이, 가스 제거 요령, 확인할 점까지 안내합니다.