2012-09-17 2 views
8

난 그냥 계속 아무것도 할 원하는 선택 문에서 기본 원인이 있지만 라인을 비워두면 select 문에 default 케이스로 구성되어Go - 파이썬의 "패스"에 해당하는 것은 무엇입니까?

 select { 
     case quit_status := <-quit: 
      if quit_status == true { 
       fmt.Printf("********************* GOROUTINE [%d] Received QUIT MSG\n", id) 
       return 
      } 
     default: 
      fmt.Printf("GOROUTINE [%d] step: %d, NO QUIT MSG\n", id, i) 
     } 
+0

당신은 모두 기본 문을 제거 시도? –

+0

'default' 절을 완전히 생략 할 수 없습니까? – verdesmarald

답변

9

일어나는 성명에서 아무것도 중지 채널 읽기 및 쓰기를위한 비 블로킹 I/O를 제공합니다. default 케이스의 코드는 어떤 케이스의 채널도 읽기/쓰기가 가능하지 않을 때마다 실행됩니다.

따라서 종료 채널에 아무 말도하지 않으면 default 블록이 실행됩니다. 간단히 기본 사례를 삭제하면 quit_status := <-quit 값이 quit에 사용 가능해질 때까지 케이스가 차단됩니다.이 인스턴스는 아마도 사용자의 후속 작업입니다. 즉시 선택 문 다음 코드를 계속 실행하려면

, 별도의 goroutine이 select 문을 실행해야합니다

go func() { 
    select { 
    case quit_status := <-quit: 
     ... 

    } 
}() 

// Execution continues here immediately. 
+4

다른 goroutine에서 실행할 이유가 없습니다. 'default :'를 넣으면 다음 줄에 select 문을 닫을 수 있습니다. "통과"의 go 버전은 아무 것도 넣지 않는 것입니다. –

관련 문제