Jestem całkiem nowy i bawiłem się tym pakietem powiadomień .
Na początku miałem kod, który wyglądał tak:
func doit(w http.ResponseWriter, r *http.Request) {
notify.Post("my_event", "Hello World!")
fmt.Fprint(w, "+OK")
}
Chciałem dodać znak nowej linii do powyższej Hello World!
funkcji doit
, ale nie w powyższej funkcji , ponieważ byłoby to dość trywialne, ale handler
później tak jak poniżej:
func handler(w http.ResponseWriter, r *http.Request) {
myEventChan := make(chan interface{})
notify.Start("my_event", myEventChan)
data := <-myEventChan
fmt.Fprint(w, data + "\n")
}
Po go run
:
$ go run lp.go
# command-line-arguments
./lp.go:15: invalid operation: data + "\n" (mismatched types interface {} and string)
Po trochę googlowania znalazłem to pytanie na SO .
Następnie zaktualizowałem mój kod do:
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)
}
Czy to właśnie miałem zrobić? Moje błędy kompilatora zniknęły, więc myślę, że to całkiem nieźle? Czy to jest wydajne? Czy powinieneś zrobić to inaczej?
źródło
Zgodnie z prośbą @ ρяσѕρєя wyjaśnienie można znaleźć na stronie https://golang.org/pkg/fmt/#Sprint . Powiązane wyjaśnienia można znaleźć pod adresem https://stackoverflow.com/a/44027953/12817546 i https://stackoverflow.com/a/42302709/12817546 . Oto pełna odpowiedź @ Yuanbo.
źródło