Goland:远程开发,村夫并不喜欢,只是离不开

8,483 阅读2分钟

【前言】一转眼,正经用Golang开发一套系统已经有两周多了。由于村夫在好朋友Yaeson的推荐下选择了go-zero作为脚手架,为了方便快速开始,选择了在docker中构建相应的开发环境。

由于人类都知道的原因,golang可以在各种操作系统下开发,其开发也不依赖于特定的图形环境或工具。因此,您既可以使用包括Goland、VS Code在内的IDE内进行开发,也可以直接vim、emacs起来,一切全凭您的个人喜好。

不过村夫本人,还是强烈推荐您使用Goland,毕竟使用JetBrains全家桶中的产品一贯能帮我们争取大量的摸鱼时间。

一、村夫刚开始的姿势

image.png 如上图,是从nivinck兄台的mall中搬来的docker-compose.yaml中关于go开发环境的配置。其中volumes将本地的代码路径映射到了容器golang的/usr/src/code目录下。

最开始,村夫是老老实实进入到容器的bash中,vim然后go run。

image.png

村夫只是村夫,不是神也不是仙,既是凡人村夫,在写代码的过程中必然会遇到各种上需要调试的问题。 dlv debug,也搞过。实话说dlv和gdb很像,但比较gdb要好用不少。不过用了一阵,还是觉得不痛快!于是乎,村夫拿出了每一位码工(虽然村夫目前从事的工作并不“高大上”,但这里我们不用码农这个说法,无关乎对码工工作的褒贬,只是发自内心的尊一下农。)都会的print大法。

曾经有一位小兄弟跟我讲,说只有写PC程序的才print呢。写嵌入式的就不会用print。我说“好吧,你说得对!” 我肯定不会去跟他争点灯就print

二、村夫涨姿势

致平凡的我们:工作,就是要动脑子,虽然我们最擅长的就是Ctrl+C和Ctrl-V

从C语言的printf()到C艹的cout <<,又或者是佳娃的System.out.println(),又或是够浪的fmt.Println(),我不知道您使用的熟练程度如何!反正各种print,村夫都用得炉火纯青!

print好用,但就像公司楼下的板面好吃一样,吃多了总是要腻得!

好吧,好吧,我承认就是板面隔壁店的黄焖鸡深深得吸引了村夫。

之前帮儿子搞作业,跟皮查姆(PyCharm)耍过朋友;被老板扔去顶缸搞佳娃(Java)时,摸过阿娣(Idea)漂亮的脸蛋。JetBrains家的小姐姐,每一位都那么可人。我承认我又喜欢上了葛兰朵(Goland)。

如前面说的,golang容器中的代码是从主机目录映射过去了。我很自然的请葛兰朵小姐姐帮我打开了本地所对应的目录。

image.png
看上去很完美,只是无法执行程序!是什么鬼?

image.png

小意思,这个难不倒我。 image.png

但是
image.png 这个就有点那个太啥了 算了,我懒得研究etcd的这个问题(一个声音响起,脑子不好使,就直说呗,玩不转又不丢人)。

好吧,好吧,我就是用一下Goland的编辑器,还有在Goland下面的Terminal里开启容器中的程序也挺方便的。

image.png

三、为了不被二丫笑话

确实,光使用Goland作为编辑器,就可以在我们写代码时帮我们处理各种import问题、代码的缩进问题、提示式写代码。工作效率提升很大。

然而,村夫还是怕被二丫知道后会被笑话。

村夫觉得还是要解决直接调试的问题,不然二丫知道后一定会笑话村夫始终是个点灯(print)工程师的。

村夫研究了:

基于dlv的remote debug

这个说是研究,其实就是学习了一下别人的文档:
用 GoLand/VSCode 调试 Docker 内的 Go 应用 - 知乎 (zhihu.com)

说实话,也挺实用的。有兴趣的同学可以移步去参考一下!

Goland远程开发

这个方法简单且粗暴

  1. 配置容器golang使用sshd
  2. 设置到容器golang的免密ssh登录
  3. 告诉Goland到容器golang怎么走

1. 配置容器golang使用sshd

1677948398289.png 映射出22端口
1677948619589.png 告诉docker-compose在构建容器golang时安装openssh-server,并对外暴露容器的22端口

docker-compose up -d

docker-compose会重新构建容器golang,至于后如何启动ssh server服务,辛苦您自己研究一下。

2. 设置到容器golang的免密ssh登录

生成本机ssh密钥对

image.png 在您主机的~.ssh下将生成文件id_rsa.pub

image.png 将该文件的内容复制到容器golang的目录/root/.ssh/下的文件authorized_keys中,如果没有该文件,则创建一个。

image.png 测试到容器的ssh免密登录

image.png

登录正常

3. 告诉Goland到容器golang怎么走

image.png 设置新连接

image.png
用户、地址、端口及私钥

image.png
设置要开始调试的代码的路径

image.png
您是接受呢还是接受呢

image.png
欢迎欢迎

image.png
左上角显示当前连接的远端地址

image.png
可以开启调试了,单步执行走起 image.png

写在后面

还好还好,没有被二丫笑话! 感谢阅读,希望对您有所帮助!

欢迎转发求点赞