Veri ({} yazın arayüzü) dönüştürmek için dize türü: tür iddia gerek
Gitmek için oldukça yeni ve ben notify Bu paket ile oynuyordum.
İlk başta buna benzeyen bir kod vardı:
func doit(w http.ResponseWriter, r *http.Request) {
notify.Post("my_event", "Hello World!")
fmt.Fprint(w, " OK")
}
Bu oldukça önemsiz olacaktır, çünkü işlevi Hello World!
ama yeni satır ekleme doit
yukarıdaki istedim, ama handler
sonra aşağıda bu gibi:
func handler(w http.ResponseWriter, r *http.Request) {
myEventChan := make(chan interface{})
notify.Start("my_event", myEventChan)
data := <-myEventChan
fmt.Fprint(w, data "\n")
}
go run
sonra:
$ go run lp.go
# command-line-arguments
./lp.go:15: invalid operation: data "\n" (mismatched types interface {} and string)
Google'da biraz sonra this question on SO buldum.
O zaman benim kod güncelleme:
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)
}
Yapmam gereken şey bu mu? Derleyici hataları oldukça iyi, sanırım bu yüzden gitti? Bu verimli mi? Farklı bir şekilde mi yapmalısın?
CEVAP
Go specification göre:
Bir ifade için arabirim tipi x ve T türü, birincil ifade x.(T) x değil nil ve x değeri içinde saklı tipi T. olduğunu ileri sürüyor
Bir "tür" iddiası, sana bir arabirim değeri belli somut bir türü içeren veya beton türü bir arayüz karşılayacak bildirebilirsiniz.
Örnek, veri iddia ediyordunuz ({} yazın arayüzü) beton türü dize vardır. Eğer yanlış ise, program çalışma anında panik olur. Verimlilik konusunda endişelenmenize gerek yok, sadece kontrol ediyordum iki işaretçi değerleri karşılaştırarak gerektirir.
Eğer bir dize olup olmadığından emin olsaydın, iki dönüş sözdizimini kullanarak test edebilirsin.
str, ok := data.(string)
Eğer veri bir dize değil, Tamam yanlış olacaktır. Yani o zaman bir if içine böyle bir açıklama sarmak için ortak:
if str, ok := data.(string); ok {
/* act on str */
} else {
/* not string */
}
Nasıl bir kare sütun veri türü sayısal...
Nasıl dize artırma yolunu yazın dönüşt...
'in neyin en iyi json dize depola...
Okuma/bir Dize için bir İnputStream dö...
Java ile bir numaralama için bir Dize ...