原因golang代码编写是允许在同一个for select代码结构中使用相同的变量名,这样会造成运行时chan发送的内容出现乱码现象,乱码率大概在98%左右,所以这是一个坑,希望大家别重复踩坑。以下是代码说明:

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)
}
}
}
}

golang channel string 信号乱码的更多相关文章

  1. golang channel 用法转的

    一.Golang并发基础理论 Golang在并发设计方面参考了C.A.R Hoare的CSP,即Communicating Sequential Processes并发模型理论.但就像John Gra ...

  2. Golang channel 用法简介

    channel 是 golang 里相当有趣的一个功能,大部分时候 channel 都是和 goroutine 一起配合使用.本文主要介绍 channel 的一些有趣的用法. 通道(channel), ...

  3. Golang Channel用法简编

    转自:http://tonybai.com/2014/09/29/a-channel-compendium-for-golang/ 在进入正式内容前,我这里先顺便转发一则消息,那就是Golang 1. ...

  4. golang channel的使用以及调度原理

    golang channel的使用以及调度原理 为了并发的goroutines之间的通讯,golang使用了管道channel. 可以通过一个goroutines向channel发送数据,然后从另一个 ...

  5. golang channel原理

    channel介绍 channel一个类型管道,通过它可以在goroutine之间发送和接收消息.它是Golang在语言层面提供的goroutine间的通信方式. 众所周知,Go依赖于称为CSP(Co ...

  6. SpringMvc Controller请求链接忽略大小写(包含拦截器)及@ResponseBody返回String中文乱码处理

    SpringMvc Controller请求链接忽略大小写(包含拦截器)及@ResponseBody返回String中文乱码处理... @RequestMapping(value = "/t ...

  7. mysql中Incorrect string value乱码问题解决方案

    mysql中Incorrect string value乱码问题解决方案   你是否遇到过类似以下错误? java.sql.SQLException: Incorrect string value: ...

  8. golang channel关闭后,是否可以读取剩余的数据

    golang channel关闭后,其中剩余的数据,是可以继续读取的. 请看下面的测试例子. 创建一个带有缓冲的channel,向channel中发送数据,然后关闭channel,最后,从channe ...

  9. golang channel初次接触

    goroutine之间的同步 goroutine是golang中在语言级别实现的轻量级线程,仅仅利用go就能立刻起一个新线程.多线程会引入线程之间的同步问题,经典的同步问题如生产者-消费者问题,在c, ...

随机推荐

  1. Java基础 -- 持有对象(容器)

    一 容器的用途 如果对象的数量与生命周期都是固定的,自然我们也就不需要很复杂的数据结构. 我们可以通过创建引用来持有对象,如 Class clazz; 也可以通过数组来持有多个对象,如 Class[] ...

  2. (二) V4L2引入(含浅析UVC)

    title: V4L2引入(含浅析UVC) date: 2019/4/23 19:00:00 toc: true --- V4L2引入(含浅析UVC) 基本框架 V4L2全名是video for li ...

  3. 源码-mybatis-01-SqlSessionFactory创建

    0.总概   1.SqlSessionFactory在mybatis只要创建一次: import com.suntek.vdm.gw.util.AESEncipher; import org.apac ...

  4. 《Unbroken》

    <Unbroken> 献给正在奋力向前的你 You can’t connect the dots looking forward, you can only connect them lo ...

  5. IIS 常用命令

    Ø  简介 本文主要介绍 IIS 常用的命令,主要包含以下内容: 1.   IIS  重启方法 2.   站点重启方法 3.   应用程序池重启方法 1.   IIS 重启方法 1)   重启 IIS ...

  6. 【bzoj 4833】[Lydsy1704月赛]最小公倍佩尔数

    Description 令 $(1+\sqrt 2)^n=e(n)+\sqrt 2\cdot f(n)$ ,其中 $e(n),f(n)$ 都是整数,显然有 $(1-\sqrt 2)^n=e(n)-\s ...

  7. 怎样解决canvas 插件 和html 页面中的事件冲突问题 ?

    很简单 ,在html 执行事件所在的div中 设置 position:relative;    

  8. UE4网络同步属性笔记

    GameMode只有服务端有,适合写游戏逻辑.PlayerController每个客户端拥有一个,并拥有主控权.GameState在服务端同步到全端. CLIENT生成的Actor对其有Authori ...

  9. 贪吃蛇游戏——C语言双向链表实现

    采用了双向链表结点来模拟蛇身结点: 通过C语言光标控制函数来打印地图.蛇身和食物: /************************** *************************** 贪吃 ...

  10. Q - N! HDU - 1042

    使用java还不熟练,错误在于读入.应用in.hasNext() 代码 import java.text.ParseException; import java.text.SimpleDateForm ...