Eu sou muito novo para ir e eu estava jogando com este pacote de notificação .
No começo, eu tinha um código parecido com este:
func doit(w http.ResponseWriter, r *http.Request) {
notify.Post("my_event", "Hello World!")
fmt.Fprint(w, "+OK")
}
Eu queria acrescentar uma nova linha Hello World!
na função doit
acima, mas não na função acima, porque isso seria bastante trivial, mas handler
posteriormente como este abaixo:
func handler(w http.ResponseWriter, r *http.Request) {
myEventChan := make(chan interface{})
notify.Start("my_event", myEventChan)
data := <-myEventChan
fmt.Fprint(w, data + "\n")
}
Depois go run
:
$ go run lp.go
# command-line-arguments
./lp.go:15: invalid operation: data + "\n" (mismatched types interface {} and string)
Depois de pesquisar um pouco no Google, encontrei essa pergunta no SO .
Atualizei meu código para:
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)
}
É isso que eu deveria fazer? Meus erros de compilador desapareceram, então acho que isso é muito bom. Isso é eficiente? Você deveria fazer diferente?
fonte
Conforme solicitado por @ ρяσѕρєя, uma explicação pode ser encontrada em https://golang.org/pkg/fmt/#Sprint . Explicações relacionadas podem ser encontradas em https://stackoverflow.com/a/44027953/12817546 e em https://stackoverflow.com/a/42302709/12817546 . Aqui está a resposta de @ Yuanbo na íntegra.
fonte