Go 跨平台(机器)部署这么方便的吗?

2018-12-17 10:23:58 +08:00
 imherer
这几天不忙就看了下 go,然后用 beego 写了个 demo

我是在 mac 上开发的,尝试部署在 Linux 和 Windows 上,我发现只需要直接 build 为对应平台的版本就行了,在对应的机器上不需要安装 go 运行环境吗?

像 Node.js 或者 Python 甚至.NET ,在部署在都得在需要部署的机器上提前安装好环境,go 不需要,直接 build 然后把 build 出来的文件丢到服务器上就行了?这么方便的吗?

另外还有几个问题请教一下大佬:

1.go 最后打包出来的可执行文件永远只有一个吗?有没有可能根据我的业务逻辑分别打包成几大块(例如:main、lib1、lib2 ),虽然好像这样意义也不大?

2.写代码前需要设置 GOPATH。假如我有多个项目的话 GOPATH 是不是也得设置多个?那 GOBIN 好像只能设置一个啊。
对于多个项目你们是怎么弄的?还是 GOPATH 只有一个,在 src 下建不同的文件夹来区分项目吗,最后通过 go build 指定路径来打包吗?

3.假如我现在打包出来一个文件为 main,在 Linux 执行它的方式为./main (是这样的吧)

4.go 有没有类似 Node.js 下的 pm2 这种守护进程管理工具? 你们在服务器上怎么部署的 go ?总不可能是 nohup 吧

最后:刚接触,可能有些地方问的不对的还请各位大佬见谅!
12917 次点击
所在节点    程序员
92 条回复
blless
2018-12-17 19:16:52 +08:00
@jjx go 的依赖更新就是 git 另外 python 跟 go 没有可比性
mmdsun
2018-12-17 19:31:06 +08:00
@lideshun123 . Net 用得少不过还是有人用的。微信支付清算网关,.net core。腾讯游戏平台,Service Fabric
janxin
2018-12-17 22:21:19 +08:00
@imherer 没有私有仓库我推荐使用 https://goproxy.io
imherer
2018-12-18 09:55:24 +08:00
@janxin 谢谢,我试试
icylord
2018-12-18 09:58:58 +08:00
golang 写的东西是不是没法闭源?
sammo
2018-12-18 10:11:32 +08:00
又怕炸
又想要动态链接 节省载入内存
被链接的库又无法保证每一个稳定的新版本可以向前兼容
又还幻想瞎链也不炸

你叫我很难办阿
Muninn
2018-12-18 10:25:06 +08:00
@imherer 网络问题 你如果有一个很快的梯子的话,就不是问题了。
因为用了 go mod 后,每次 test 或者 build 都会检查一遍依赖。gopath 模式下不会联网。

而且你需要弄成 http proxy 才能对命令行起作用。

用 vscode 的话,也要在 http proxy 在环境变量时的终端里用 code 命令启动 vscode
或者在 vscode 里配置梯子。
xrlin
2018-12-18 10:57:25 +08:00
跨平台交叉编译+单文件部署是我最青睐 golang 的一点,自己写点小项目部署很方便,资源占用还小,还有因为没有各种特性,浏览器装上 sourcegraph 就可以像 ide 一样浏览代码。
realpg
2018-12-18 10:59:45 +08:00
@BXIA #8
就是静态链接
最常见的类似东西就是 windows 的程序大量采用静态链接,就算动态链接也把一系列动态链接库放到自己目录下自己独占避免系统里面包含的版本不对问题

linux 系则是大部分依赖系统内的公用库,造成了直接拷二进制各种跨机器都费劲的问题,内核版本,各种库版本的不一致
imherer
2018-12-18 11:18:36 +08:00
@Muninn 嗯,是的。我只是奇怪我在 go.mod 里已经把源 replace 到 GitHub 上的源了,为什么还会去拉取。
不过用了 janxin 给的方法直接改 GOPROXY 更简单
RqPS6rhmP3Nyn3Tm
2018-12-18 11:44:08 +08:00
@realpg 我知道他是静态链接,但是如此方便跨架构编译给我造成了巨大的冲击
交叉编译个稍微大点的 C 项目就很让我绝望了(依赖问题太麻烦,就算静态链接还是很痛苦),go 在这方面上是真的牛逼
TinyKube
2018-12-19 09:48:29 +08:00
@imherer 这个代理似乎没有同步更新,个人依赖的 Kubernetes 相关的依赖都很久,设置下 http 代理就可以直接拉

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/518179

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX