218 votes

ne peut pas convertir des données (type interface {}) en type chaîne de caractères : besoin d'une assertion de type

Je suis assez nouveau sur Go et je jouais avec ceci informer paquet.

Au début, j'avais un code qui ressemblait à ceci :

func doit(w http.ResponseWriter, r *http.Request) {
    notify.Post("my_event", "Hello World!")
    fmt.Fprint(w, "+OK")
}

Je voulais ajouter une nouvelle ligne à Hello World! mais pas dans la fonction doit ci-dessus, parce que cela serait assez trivial, mais dans le cadre de la handler après comme ceci ci-dessous :

func handler(w http.ResponseWriter, r *http.Request) {
    myEventChan := make(chan interface{})
    notify.Start("my_event", myEventChan)
    data := <-myEventChan
    fmt.Fprint(w, data + "\n")
}

Après go run :

$ go run lp.go 
# command-line-arguments
./lp.go:15: invalid operation: data + "\n" (mismatched types interface {} and string)

Après un peu de recherche sur Google, j'ai trouvé cette question sur le SO .

Puis j'ai mis à jour mon code pour :

func handler(w http.ResponseWriter, r *http.Request) {
    myEventChan := make(chan interface{})
    notify.Start("my_event", myEventChan)
    data := <-myEventChan
    s:= data.(string) + "\n"
    fmt.Fprint(w, s)
}

C'est ce que j'étais censé faire ? Mes erreurs de compilation ont disparu, donc je suppose que c'est plutôt bien ? Est-ce efficace ? Devriez-vous le faire différemment ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X