背景:在理解goroutine及channel(通道)知识过程中,想要通过debug逐步分析程序执行过程,以下分享在vscode中配置debug过程及通道执行过程解析。
1. 在VSCode里面下载安装golang的插件
2. 配置golang辅助工具
使用快捷键:Ctrl+Shift+P 输入Go:Install/Update Tools
选择全都要
一开始可能会安装失败,如下图
这是因为go的支持挂在国外,我们可以用go的代理,进行如下操作
2.1配置go代理的环境变量
进入goproxy.io网站
里面有个Windows和Linux两种环境,根据自己实际环境配置,如下为windows配置演示:
环境变量配置完成后,打开cmd执行go env,配置的环境变量已经生效。
接下来重启VSCode,Ctrl+Shift+P 输入Go:Install/Update Tools,安装(重复上述 2. 步骤)
安装成功
3.创建模块
点击左侧debug
点击显示所有自动调试配置,添加配置
选中 GO:Launch file
"program": "${file}"表示执行项目位置为当前打开文件位置
设置断点,点击main 按F5,左侧出现变量信息,即可调试
4.在程序执行过程中,通道作用解析。
4.1设置三处断点(开启goroutine处及通道位置),按F5执行debug
可以看到,当前执行位置为橙色框框位置,逐过程执行
两个goroutine先执行,执行到需要从c中读取x,y值时,停止执行,等待sum函数中c值的传递。 观察以下图左侧值部分,此时x=17,继续执行,y=-5,从通道取值完成后,main程序才继续执行下一行。
为了验证由于goroutine并发执行,我又执行了几次程序,发现每次执行x,y的值可能不一样,如下图左侧位置
总结:
- 在执行make(chan int) 创建无缓冲区通道后,接受方也会阻塞直到发送方往通道中发送了值。
- go是并发的,不同线程传递值的顺序会有不同。