2017-08-19 3 views
0

Cette fonction est appelée à partir d'un goroutine en transmettant le paramètre m.Ne reconnaît pas une variable de chaîne provenant d'un canal dans une instruction Switch golang

La valeur envoyée en m est la chaîne: « 01A » et l'instruction switch ne reconnaît pas

func myfunc(m string, c chan string) { 
    defer close(c) 

    switch m { 
    case "01a": 
     msg_out = "NO PASS" 
    } 
    c <- msg_out 
} 

lorsque jeu m le commutateur fonctionne très bien

func myfunc(m string, c chan string) { 
    defer close(c) 

    m = "01a" 
    switch m { 
    case "01a": 
     msg_out = "PASS" 
    } 
    c <- msg_out 
} 

Je soupçonne que le canal présentera autres caractères cachés

Répondre

1

On ne sait pas exactement ce que votre code essaie de faire, le code fourni n'est pas valide. Vous n'avez montré aucune tentative de lecture du canal dans l'un des exemples fournis, les deux exemples activent une chaîne puis attribuent une nouvelle valeur à msg_out (qui n'est pas déclarée) et envoient cette valeur sur un canal.

Sans le code complet, il est impossible de dire où vous allez mal, voici un exemple simple d'envoi de texte sur un canal et de relecture. Espérons que cela clarifiera le processus et confirmera que les chaînes sont bien envoyées sur les canaux.

Si vous n'arrivez toujours pas à le faire fonctionner, je pense que vous aurez besoin de poster un exemple de code complet pour obtenir de l'aide.

Go playground

package main 

    import (
     "log" 
     "time" 
    ) 

    func main() { 

     //make the channel 
     strChan := make(chan string) 

     //launch a goroutine to listen on the channel 
     go func(strChan chan string) { 

      //loop waiting for input on channel 
      for { 
       select { 
       case myString := <-strChan: 
        // code to be run when a string is recieved here 

        // switch on actual contents of the string 
        switch myString { 
        case "I'm the expected string": 
         log.Println("got expected string") 
        default: 
         log.Println("not the string I'm looking for") 
        } 
       } 
      } 
     }(strChan) 

     //sleep for a bit then send a string on the channel 
     time.Sleep(time.Second * 2) 
     strChan <- "I'm the expected string" 

     //wait again, gives channel response a chance to happen 
     time.Sleep(time.Second * 2) 
}