Seleccionar estado de cuenta en idioma Go

En el lenguaje Go, la declaración de selección es como la declaración de cambio , pero en la declaración de selección, la declaración de caso se refiere a la comunicación, es decir, la operación de envío o recepción en el canal.

Sintaxis:

select{

case SendOrReceive1: // Statement
case SendOrReceive2: // Statement
case SendOrReceive3: // Statement
.......
default: // Statement

Puntos importantes:

  • La instrucción Select espera hasta que la comunicación (operación de envío o recepción) esté preparada para que comiencen algunos casos.

    Ejemplo:

    // Go program to illustrate the
    // concept of select statement
    package main
       
    import("fmt"
     "time")
           
        // function 1
        func portal1(channel1 chan string) {
      
            time.Sleep(3*time.Second)
            channel1 <- "Welcome to channel 1"
        }
           
        // function 2
         func portal2(channel2 chan string) {
      
            time.Sleep(9*time.Second)
            channel2 <- "Welcome to channel 2"
        }
       
    // main function
    func main(){
           
        // Creating channels
       R1:= make(chan string)
       R2:= make(chan string)
          
       // calling function 1 and 
       // function 2 in goroutine
       go portal1(R1)
       go portal2(R2)
      
       select{
      
            // case 1 for portal 1
           case op1:= <- R1:
           fmt.Println(op1)
       
           // case 2 for portal 2
           case op2:= <- R2:
           fmt.Println(op2)
       }
          
    }

    Producción:

    Welcome to channel 1

    Explicación: En el programa anterior, el portal 1 duerme durante 3 segundos y el portal 2 duerme durante 9 segundos después de que termine su tiempo de sueño, estarán listos para continuar. Ahora, la declaración de selección espera hasta su hora de dormir, cuando el portal 2 se despierta, selecciona el caso 2 e imprime «Bienvenido al canal 1». Si el portal 1 se despierta antes que el portal 2, la salida es «bienvenido al canal 2».

  • Si una declaración de selección no contiene ninguna declaración de caso, entonces esa declaración de selección espera para siempre.

    Sintaxis:

    select{}

    Ejemplo:

    // Go program to illustrate the
    // concept of select statement
    package main
      
    // main function
    func main() {
          
        // Select statement 
       // without any case
       select{ }
      
         
    }

    Producción:

    fatal error: all goroutines are asleep - deadlock!
    
    goroutine 1 [select (no cases)]:
    main.main()
        /home/runner/main.go:9 +0x20
    exit status 2
    
  • La declaración predeterminada en la declaración de selección se usa para proteger la declaración de selección del bloqueo. Esta declaración se ejecuta cuando no hay ninguna declaración de caso lista para continuar.

    Ejemplo:

    // Go program to illustrate the
    // concept of select statement
    package main
      
    import "fmt"
      
    // main function
    func main() {
          
        // creating channel
        mychannel:= make(chan int)
       select{
         case <- mychannel: 
           
         default:fmt.Println("Not found")
    }   
    }

    Producción:

    Not found
  • El bloqueo de la declaración de selección significa que cuando no hay una declaración de caso lista y la declaración de selección no contiene ninguna declaración predeterminada, entonces la declaración de selección se bloquea hasta que al menos una declaración de caso o comunicación pueda continuar.

    Ejemplo:

    // Go program to illustrate the
    // concept of select statement
    package main
      
    // main function
    func main() {
          
        // creating channel
        mychannel:= make(chan int)
          
        // channel is not ready 
       // and no default case
       select{
           case <- mychannel:
             
       }
    }

    Producción:

    fatal error: all goroutines are asleep - deadlock!
    
    goroutine 1 [chan receive]:
    main.main()
        /home/runner/main.go:14 +0x52
    exit status 2
  • En la declaración de selección, si varios casos están listos para continuar, entonces uno de ellos puede seleccionarse al azar.

    Ejemplo:

    // Go program to illustrate the
    // concept of select statement
    package main
      
    import "fmt"
          
          
        // function 1
        func portal1(channel1 chan string){
            for i := 0; i <= 3; i++{
                channel1 <- "Welcome to channel 1"
            }
              
        }
          
        // function 2
         func portal2(channel2 chan string){
            channel2 <- "Welcome to channel 2"
        }
      
    // main function
    func main() {
          
        // Creating channels
       R1:= make(chan string)
       R2:= make(chan string)
         
       // calling function 1 and 
       // function 2 in goroutine
       go portal1(R1)
       go portal2(R2)
         
       // the choice of selection 
       // of case is random
       select{
           case op1:= <- R1:
           fmt.Println(op1)
           case op2:= <- R2:
           fmt.Println(op2)
       }
    }

    Producción:

    Welcome to channel 2

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *