golang channel string 信號亂碼

緣由golang代碼編寫是容許在同一個for select代碼結構中使用相同的變量名,這樣會形成運行時chan發送的內容出現亂碼現象,亂碼率大概在98%左右,因此這是一個坑,但願你們別重複踩坑。如下是代碼說明:golang

var DelHubs chan string = make(chan string)
var DelHub chan string = make(chan string)
go func() {
Deller.DelHub <- key
}()
 
//會出現亂碼的代碼,我在兩個不一樣的chan中定義並使用了兩個相同命名的變量,這就是形成亂碼問題所在
func delChan() {
for {
select {
case ukey, ok := <-Deller.DelHubs:
if ok {
hs, err := hubStartWith(ukey)
if err != nil {
break
}
for _, v := range hs {
ukeyhid := ukey + ":" + strconv.FormatInt(v.Id, 10)
del(ukeyhid)
go deldos(ukeyhid)
}
}
case ukeyhid, ok := <-Deller.DelHub:
if ok {
del(ukeyhid)
go deldos(ukeyhid)
}
}
}
}
//解決方法,很簡單隻要改爲各自不一樣的變量名就能夠
func delChan() {
for {
select {
case ukey, ok := <-Deller.DelHubs:
if ok {
hs, err := hubStartWith(ukey)
if err != nil {
break
}
for _, v := range hs {
delhubs := ukey + ":" + strconv.FormatInt(v.Id, 10)
del(delhubs)
go deldos(delhubs)
}
}
case delhub, ok := <-Deller.DelHub:
if ok {
del(delhub)
go deldos(delhub) } } }}
相關文章
相關標籤/搜索