Go进阶36:Goland远程开发调试

Go进阶36:Goland远程开发调试

我们团队大部分的人都是使用mac开发, 而我比较持家舍不得花大价钱来更新换代我5年前买的macbook, 所以我长期使用公司配备的Window10进行日常的开发. 在之前的99%的情况下我的windows10都可以满足安装各种环境(ruby/jekyll,python,php,java). 直到有一个同事在项目中添加confluent-kafka-go来使用消息队列, 发现confluent-kafka-go依赖的是c++, 同时还依赖一个可执行文件,这个可执行文件只支持mac/linux windows10不支持. 更糟糕的是, 我之前觉得windows10子系统用的少, 我也把我的ubuntu子系统删掉了, 同时把hyper-V卸载了, 现在在安装ubuntu子系统就会报错.

难道我要放弃在windows10开发这个golang项目吗? 程序员绝不说不 解决方案就是:

  1. Golang->SFTP 自动同步代码到linux开发服务器(SMBA也可以)
  2. linux 服务器: go build -> dvl 开启远程调式服务
  3. Goland 连接dvl 服务地址

1. 远程调试Debug优点

  1. 极大的加快开发速度,减少给在代码中使用大量log来定位错误.
  2. 最大程度的使用linux远程服务器环境, 极大的简化本地部署模拟服务器环境
  3. 可以绕过数据库内网的限制
  4. 不用依赖日志来定位错误(开发效率太低)
  5. 完美的解决一些不支持windows开发的依赖

2. Go远程调试Debug

2.1 linux 安装Golang环境

#https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz
VERSION='1.13.4';#设置go语言版本 指定您的版本 OS=linux # 可选值 linux darwin ARCH=amd64 #可选值 但是必须与您的操作系统匹配 amd64, 386, arm (树莓派raspberryPi3), arm64, s390x, ppc64le GZFILE="go$VERSION.$OS-$ARCH.tar.gz" # 下载的安装名称包含arch wget "https://dl.google.com/go/${GZFILE}"; rm -rf /usr/local/go; # 删除旧的go安装文件 tar -C /usr/local -xzf $GZFILE; #解压文件到 /usr/local/go目录中 

在您是linux的 vim 环境变量文件(~/.bashrc /etc/profile)最后添加一下3行代码:

export GOPATH=/opt/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN

重新加载环境变量文件: mkdir -p $GOBIN; 创建目录 source /etc/profile or source ~/.bashrc

2.2 linux服务器安装Delve

文档 linux 安装Delve

git clone https://github.com/go-delve/delve.git $GOPATH/src/github.com/go-delve/delve
cd $GOPATH/src/github.com/go-delve/delve
make install
# dlv 在您的$GOBI目录 ls $GOBIN dlv # 不报错证明安装好了 

2.2 Goland SFTP 自动同步代码(SMBA也可以)

如果找不到SFTP,请安装SFTP Plugin, Goland 添加SFTP: Goland菜单: Tools -> Deployment -> Configuration 加号Goland 添加SFTP

Goland SFTP 本地代码目录映射

本地代码目录映射

勾选自动上传Goland菜单: Tools -> Deployment -> Auto Upload(Always)

2.3 服务器开启Delve 服务

cd ~/go_project; # golang 代码目录
go build -o app.exe; # 编译golang代码 dlv --listen=:2345 --headless=true --api-version=2 exec ~/go_project/app.exe api; # 开启delve服务 其中 api 是golang程序的参数 

建议把上面的命令自定为linux 当前用户的profile文件的alias 参考我的 ~/.bashrc 文件, 我定义了一个 debugm 命令来调试go代码.

# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then . /etc/bashrc fi export GOBIN=/gobin; export PATH=$PATH:/usr/local/go/bin:$GOBIN; export GOPROXY=https://goproxy.io export GO111MODULE=on alias debugm="cd ~/go_project; go build -o app.exe; dlv --listen=:2345 --headless=true --api-version=2 exec ~/go_project/app.exe api" 

2.4 Goland Debug 配置

填写linux 服务的ip 和 delve的端口,自己设置防火墙.

2.5 Goland打断点

每次代码更新的适合需要在linux中 ctrl+c, 在执行debugm(自定义命令) linux 服务器中:

[eric@mojotv.cn ~]$ cat ~/.bashrc #查看当前用户的profile 配置
[eric@mojotv.cn ~]$ debugm # 执行自定义的命令 API server listening at: [::]:2345 

在Goland中点击debug按钮

[mojotv.cn@p28537v yzt]$ debugm
API server listening at: [::]:2345
# Golang 点击虫子按钮之后打印出来的
2019/11/27 19:09:29 访问 http://127.0.0.1:9527/swagger-doc for RESTful APIs Swagger 文档 [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. - using env: export GIN_MODE=release - using code: gin.SetMode(gin.ReleaseMode) [GIN-debug] GET /swagger-doc/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (3 handlers) [GIN-debug] HEAD /swagger-doc/*filepath --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (3 handlers) INFO[0000] start asset sync runner... [GIN-debug] GET /screen-shot/assets/:id --> marvel/handler.AssetScreenShot (4 handlers) [GIN-debug] GET /api/v1/admin-division --> marvel/handler.AdminDivision (4 handlers) ... [GIN-debug] Listening and serving HTTP on 0.0.0.0:9527 

Goland断点效果

The End

线上交流工具: 在你的terminal中输入 ssh $用户@mojotv.cn

在你的terminal中输入 ssh mojotv.cn hn 查看最新 hacknews

原文地址:http://www.cnblogs.com/cheyunhua/p/16883379.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性