Soy bastante nuevo y estaba jugando con este paquete de notificación .
Al principio tenía un código que se veía así:
func doit(w http.ResponseWriter, r *http.Request) {
notify.Post("my_event", "Hello World!")
fmt.Fprint(w, "+OK")
}
Quería agregar nueva línea a, Hello World!
pero no en la función doit
anterior, porque eso sería bastante trivial, pero a handler
continuación, como esto a continuación:
func handler(w http.ResponseWriter, r *http.Request) {
myEventChan := make(chan interface{})
notify.Start("my_event", myEventChan)
data := <-myEventChan
fmt.Fprint(w, data + "\n")
}
Después go run
:
$ go run lp.go
# command-line-arguments
./lp.go:15: invalid operation: data + "\n" (mismatched types interface {} and string)
Después de buscar un poco en Google, encontré esta pregunta en SO .
Luego actualicé mi código a:
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)
}
¿Es esto lo que se suponía que debía hacer? Mis errores de compilación han desaparecido, así que supongo que eso es bastante bueno. ¿Es esto eficiente? ¿Deberías hacerlo de manera diferente?
fuente
Según lo solicitado por @ ρяσѕρєя, se puede encontrar una explicación en https://golang.org/pkg/fmt/#Sprint . Se pueden encontrar explicaciones relacionadas en https://stackoverflow.com/a/44027953/12817546 y en https://stackoverflow.com/a/42302709/12817546 . Aquí está la respuesta completa de @Yuanbo.
fuente