Open linbuxiao opened 1 year ago
虽然在生活里我并不擅长归纳,在编程时却时常纠结于此。 开发环境常常是混乱的,多个语言,多个版本,多套依赖,这很容易造成不可收拾的混乱 —— 尽管这往往是假象。 因为长期的开发工作让我们明白,没有真正的混乱,只有无可避免的复杂度。
另外对于开发环境而言,反复的去布置让人伤神。而我们天生倾向于避免重复进行复杂的操作。这个时候远程开发出现了。 远程开发将帮助你:
首先考虑的是 Gateway。因为我太依赖 Goland 了。Goland 的语法提示,环境布置,单步调试。关于这门语言的一切编辑技巧,都已经和 Goland 绑定。
但 Gateway 确实不够成熟好用。它实在是太卡了。 开始我以为是延迟的问题,于是我购入了国内的服务器。但这仍然阻止不了它时不时的跳 ping。 后来我觉得是配置太低,于是根据推荐配置,性能加到 2 核 4 G。当然我还想加更多,预算阻止了我。 结果是这都没能解决问题。
我毅然决然回到 VS Code。 之所以用“回到”,是因为在我一年多的前端生涯中,VS Code 一直是我的主力选择。这么算来,使用时间比 J 家要长些。
VS Code Remote 太流畅了。相比 Gateway,它完全实现了类本地开发的体验。 也是因为这个,就算我们遇到了一些其他问题,还是只能选择它。因为这种体验就是你梦寐以求的 remote。
遇到的问题有:
第一点需要适应,第二点可以改变,具体方法在下文我会提到,其余两点还是自求多福。 总而言之,我选择 VS Code。
在开发时,很多依赖以及文件的安装下载都需要一个“合适”的网络环境。虽然说类似于 Golang 提供了 Proxy 的配置,但首先面临的问题是:怎么把 Go 下载下来。因为国内的下载实在是太卡了。
这里我的方案是 Clash + ProxyChains。
首先下载 Clash,选择的版本是 clash-linux-amd64。 下载与配置可以参考这篇文章:https://einverne.github.io/post/2021/03/linux-use-clash.html 我选择的进程守护方案是 pm2。因为相对来说熟悉一些。
pm2 start "clash -f <你的配置文件>"
pm2 log <pid>
pm2 list
ProxyChains 的意义是:虽然你起了 clash,但是类似于 ping 等命令并不知道这件事。clash 只提供了端口接收流量并转发流量。你还需要一位指路人:让需要处理的流量去向 clash 的端口。ProxyChains 就是指路人。
ping
简单配置也可以通过这位大大的另一篇文章看到:https://einverne.github.io/post/2017/02/terminal-sock5-proxy.html
对于尊重环境变量的大部分程序,可以通过设置全局代理来解决。zsh 可以这样设置:
# where proxy proxy () { export http_proxy="http://127.0.0.1:7890" export https_proxy="http://127.0.0.1:7890" echo "HTTP Proxy on" } # where noproxy noproxy () { unset http_proxy unset https_proxy echo "HTTP Proxy off" }
在需要时直接 proxy 即可。
大部分情况下建议使用全局代理,proxychains 总是会出一些奇怪的问题。 另外,建议把内网 clash 规则前置,避免被其它规则覆盖。
在开发过程中,有些中间件会走内网流量。如数据库,Redis 这些。甚至于我们的一些依赖也需要通过内网下载。 在使用 Mac 时,我使用 SSH Tunnel 建立内网通道,使用 Proxier 捕获指向内网的流量,并引路到SSH Tunnel 中去。 在 Linux 下的实现方案也基本一致。 区别是:
ssh -N -D 8080 username@xxxx.gateway.com.cn
alias xxx-ssh="ssh -N -D 8080 username@xxxx.gateway.com.cn"
在我们需要内网时,可以用 ProxyChains 将流量导向 clash,clash 通过规则将这部分导向 tunnel,这样打通。
{ "http.proxySupport": "on", "go.logging.level": "error", "[go]": { "editor.insertSpaces": false, "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.organizeImports": true }, "editor.suggest.snippetsPreventQuickSuggestions": false }, "workbench.colorTheme": "Monokai", "go.alternateTools": { "dlv": "dlv", "go": "/root/.goenv/versions/1.18.0/bin/go" # 手动设置路径 }, "security.workspace.trust.untrustedFiles": "newWindow", "editor.fontFamily": "Sarasa Mono SC, Menlo, Monaco, 'Courier New', monospace", "go.toolsManagement.autoUpdate": true, "editor.bracketPairColorization.enabled": true, "editor.guides.bracketPairs": "active", "workbench.iconTheme": "material-icon-theme", "editor.fontSize": 13, "editor.unicodeHighlight.nonBasicASCII": false, "terminal.integrated.defaultProfile.linux": "zsh" # 设置默认终端 }
众所周知关于 Go 的设置很多,但个人建议在能用起来的前提下,尽量少的去设置。 因为多个设置之间的关系可能是相互覆盖的:网上很多的长篇配置方案,其实有很多设置都无效化了。
这边列出几个目前主流方案作为参考。
官方给出的方案是很明了的,先下一个主版本,再通过 go install 安装其他版本。 使用时通过 go1.18 这样的方式去运行。 这种方案最大的问题是无法控制 GOPATH,但是我是 MOD 重度依赖者。这点可以接受。 另一点就是不够直观,go1.18 和 go 还是有区别的。 另外可能还有其他坑,欢迎深度使用过的大佬进行补充。
go install
GOPATH
很老牌的版本管理工具,解决了以上的问题。个人觉得唯一的缺点是很久没维护了(20年至今)。 使用时有几点需要注意:
GO_BINARY_BASE_URL
较年轻的版本管理工具,据作者所说的有很多优势,个人觉得缺点有以下几点:
国人开发的工具,对国内安装做出了很多兼容。
虽然在生活里我并不擅长归纳,在编程时却时常纠结于此。 开发环境常常是混乱的,多个语言,多个版本,多套依赖,这很容易造成不可收拾的混乱 —— 尽管这往往是假象。 因为长期的开发工作让我们明白,没有真正的混乱,只有无可避免的复杂度。
另外对于开发环境而言,反复的去布置让人伤神。而我们天生倾向于避免重复进行复杂的操作。这个时候远程开发出现了。 远程开发将帮助你:
VS Code 还是 Jetbrains Gateway
首先考虑的是 Gateway。因为我太依赖 Goland 了。Goland 的语法提示,环境布置,单步调试。关于这门语言的一切编辑技巧,都已经和 Goland 绑定。
但 Gateway 确实不够成熟好用。它实在是太卡了。 开始我以为是延迟的问题,于是我购入了国内的服务器。但这仍然阻止不了它时不时的跳 ping。 后来我觉得是配置太低,于是根据推荐配置,性能加到 2 核 4 G。当然我还想加更多,预算阻止了我。 结果是这都没能解决问题。
我毅然决然回到 VS Code。 之所以用“回到”,是因为在我一年多的前端生涯中,VS Code 一直是我的主力选择。这么算来,使用时间比 J 家要长些。
VS Code Remote 太流畅了。相比 Gateway,它完全实现了类本地开发的体验。 也是因为这个,就算我们遇到了一些其他问题,还是只能选择它。因为这种体验就是你梦寐以求的 remote。
遇到的问题有:
第一点需要适应,第二点可以改变,具体方法在下文我会提到,其余两点还是自求多福。 总而言之,我选择 VS Code。
网络环境
在开发时,很多依赖以及文件的安装下载都需要一个“合适”的网络环境。虽然说类似于 Golang 提供了 Proxy 的配置,但首先面临的问题是:怎么把 Go 下载下来。因为国内的下载实在是太卡了。
这里我的方案是 Clash + ProxyChains。
首先下载 Clash,选择的版本是 clash-linux-amd64。 下载与配置可以参考这篇文章:https://einverne.github.io/post/2021/03/linux-use-clash.html 我选择的进程守护方案是 pm2。因为相对来说熟悉一些。
pm2 start "clash -f <你的配置文件>"
启动即可。pm2 log <pid>
pm2 list
ProxyChains 的意义是:虽然你起了 clash,但是类似于
ping
等命令并不知道这件事。clash 只提供了端口接收流量并转发流量。你还需要一位指路人:让需要处理的流量去向 clash 的端口。ProxyChains 就是指路人。简单配置也可以通过这位大大的另一篇文章看到:https://einverne.github.io/post/2017/02/terminal-sock5-proxy.html
对于尊重环境变量的大部分程序,可以通过设置全局代理来解决。zsh 可以这样设置:
在需要时直接 proxy 即可。
大部分情况下建议使用全局代理,proxychains 总是会出一些奇怪的问题。 另外,建议把内网 clash 规则前置,避免被其它规则覆盖。
内网开发
在开发过程中,有些中间件会走内网流量。如数据库,Redis 这些。甚至于我们的一些依赖也需要通过内网下载。 在使用 Mac 时,我使用 SSH Tunnel 建立内网通道,使用 Proxier 捕获指向内网的流量,并引路到SSH Tunnel 中去。 在 Linux 下的实现方案也基本一致。 区别是:
ssh -N -D 8080 username@xxxx.gateway.com.cn
来替代 SSH Tunnel。alias xxx-ssh="ssh -N -D 8080 username@xxxx.gateway.com.cn"
在我们需要内网时,可以用 ProxyChains 将流量导向 clash,clash 通过规则将这部分导向 tunnel,这样打通。
VS Code 配置
Tip
众所周知关于 Go 的设置很多,但个人建议在能用起来的前提下,尽量少的去设置。 因为多个设置之间的关系可能是相互覆盖的:网上很多的长篇配置方案,其实有很多设置都无效化了。
Go Version
这边列出几个目前主流方案作为参考。
The Official
官方给出的方案是很明了的,先下一个主版本,再通过
go install
安装其他版本。 使用时通过 go1.18 这样的方式去运行。 这种方案最大的问题是无法控制GOPATH
,但是我是 MOD 重度依赖者。这点可以接受。 另一点就是不够直观,go1.18 和 go 还是有区别的。 另外可能还有其他坑,欢迎深度使用过的大佬进行补充。GVM
很老牌的版本管理工具,解决了以上的问题。个人觉得唯一的缺点是很久没维护了(20年至今)。 使用时有几点需要注意:
GO_BINARY_BASE_URL
来更改源地址。Goenv
较年轻的版本管理工具,据作者所说的有很多优势,个人觉得缺点有以下几点:
g
国人开发的工具,对国内安装做出了很多兼容。