2012-09-17 11 views
8

tengo una causa por defecto en una instrucción select que yo quiero hacer nada, sólo seguir, pero dejando en blanco la línea se detiene nada en la declaración sucedaGo - ¿Cuál es el equivalente del "pase" de Python?

 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

¿Ha intentado quitar la declaración por defecto en total? –

+0

¿No puedes omitir por completo la cláusula 'default'? – verdesmarald

Respuesta

9

El caso default en un comunicado select pretende proporcionar E/S sin bloqueo para lecturas y escrituras de canales. El código en el caso default se ejecuta cuando ninguno de los canales en ninguno de los casos está listo para lectura/escritura.

En su caso, el bloque default se ejecuta si el canal de salida no tiene nada que decir. Puede simplemente eliminar la caja por defecto y se bloqueará en el caso quit_status := <-quit hasta que haya un valor disponible en quit ... que probablemente sea lo que está buscando en esta instancia.

Si desea continuar inmediatamente la ejecución de código después de la instrucción de selección, se debe ejecutar esta instrucción de selección en una goroutine separada:

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

    } 
}() 

// Execution continues here immediately. 
+4

No hay razón para ejecutarlo en otra goroutine. Simplemente puede poner 'default:' luego, en la siguiente línea, cierre la instrucción select. La versión go de "pase" es simplemente no poner nada. –

Cuestiones relacionadas