初级会员
  • 第 56041 位会员
  • reckless-huang
  • 2020-08-27 04:25:34
  • Offline
  • 19 50

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • #8 @lihongbin 学到了,谢谢您,还能请教您一个小问题么,我的一段代码 ````go func (this *ExitMes) ExitMesProcess(mes *message.Message) (err error) { fmt.Println(mes) var exitMes message.ExitMes err = json.Unmarshal([]byte(mes.Data), &exitMes) fmt.Println(err) data, err := json.Marshal(exitMes) fmt.Println(string(data)) //println(*exitMes) if err != nil { err = model.ERROR_JSON_UNMARSHAL return } //根据userId将用户从在线列表中剔除 userMgr.DelOnlineUser(exitMes.User.UserId) //将这条用户退出消息广播给其他在线用户 sp := SmsProcess{} //println(mes) sp.SendGroupSms(mes) return } ```` 然而反序列的值无法写入到exitMes这个变量中
  • 新手入门
  • 不明白model怎么和elem关联的
  • 5楼 @lihongbin 谢谢您,判断那里的确有问题,flag = true 写在循环体是因为每次循环结束后flag的值被置为false了,要改回来,下面一楼有我改好的代码,您可以帮忙看看有可以优化的么
  • 更新后的代码如下,可以正常工作,就是感觉不够优雅 ```go package main import ( "fmt" _ "sync" ) func writeData(intChan chan int) { for i := 1; i < 80; i++ { intChan <- i } fmt.Println("writeData()执行完毕") fmt.Println("关闭intChan") close(intChan) } func judgData(intChan chan int, resultChan chan int, exitChan chan bool) { //time.Sleep(time.Millisecond *100) //fmt.Println("开始读取intChan") flag := true for { flag = true //重置标志位,因为后面这个值被设置为false了 num, ok := <-intChan if !ok { fmt.Println("数据读取完毕") break } for a := 2; a < num; a++ { if num%a == 0 { flag = false break } } if flag { resultChan <- num } } exitChan <- true fmt.Println("一个协程执行完毕") } func main() { intChan := make(chan int, 10000) resultChan := make(chan int, 10000) exitChan := make(chan bool, 8) //var wgw sync.WaitGroup //var wgr sync.WaitGroup //wgw.Add(1) //wgr.Add(8) go writeData(intChan) //go writeData(intChan, wgw.Done) //wgw.Wait() //close(intChan) for i := 0; i < 8; i++ { go judgData(intChan, resultChan, exitChan) } go func() { for sec := 0; sec < 8; sec++ { <-exitChan //如果没有值就会等待值写入,造成主线程的阻塞 } close(resultChan) }() // 这里用协程是不让这个取值堵塞主线程的取值 //time.Sleep(time.Second *10) //wgr.Wait() for { key, ok := <-resultChan if !ok { //这里会因为上面的协程没结束,没有关闭resultChan,ok的值一直未true而阻塞一直到所有协程执行完毕 break } fmt.Printf("素数:%v\n", key) } } ```