Golang Go语言程序部署到服务器好方便啊

Golang Go语言程序部署到服务器好方便啊
发现 GO 语言可以在本地 OS 上生成 Linux 可执行的 exe 文件,将 exe 文件上传到服务器就可以直接运行了,好方便啊。

其他语言都是怎么部署的?有没有代码部署黑科技分享一下?

97 回复

php ftp 了解一下

更多关于Golang Go语言程序部署到服务器好方便啊的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


linux?exe?

就是可以直接在 Linux 上执行的文件。

。。。可执行文件…

docker 解决一切问题

是不是表达错误了? linux 运行不了 exe

嗯嗯,就是可执行文件的意思。

docker 一个容器打包出来几百 MB,Go 打包出来的 Linux 可执行文件只有 10 几 MB.

C/C++不也是这样吗

更可怕的是还支持各种稀奇古怪架构的 linux

C/C++ 的话应用范围不太一样吧。例如:最常见的 Web 服务很少用。

脚本语言直接 git pull 部署,逃

#12 局限于 web 的话,其他语言解决方案都很成熟啊,大多只需要 runtime 就可以了,而且全平台运行。
比如 SpringBoot,只需要 java -jar web.jar 或者./web.jar start 就可以。
Docker 体积大的问题。。。。你可以多部署几个看看磁盘大小变大了多少的

java -jar 呢…

交叉编译确实方便太多 脚本语言也还算方便吧 就是环境不好整 用 virtualenv 还是面临跨平台的问题

#9 你 docker 打的有问题吧,怎么打这么大?

非要这么说,脚本语言直接 SSH 到服务器上 VIM 就可搞定了。
不过现在都是 DevOps 理念了,任何语言都一样,docker 容器化部署,用 jenkins 自动打包了。

别的语言说方便,都是把环境搭建好之后方便。Go 的方便,是完全不需要搭建环境。

因此,如果你强调“热更新”,那其他语言也很方便,甚至可能比 Go 更方便。
而如果你强调搭建运行环境 /首次运行,那 Go 是最方便的,其他语言最多只能和 Go 并列第一。

content.replace(/exe/g, ‘binary’)

需要 jre,但是 go 打包好的不需要 go 环境,这点很爽

#22 可是流行的发行版自带 JRE

一句话总结:Go 支持交叉编译

docker 多阶段构建打出来的镜像可以是十来兆

带虚拟机的都很方便(除了 Python)

都可以直接生成 windows exe linux 可执行.
go 确实舒服这点

多阶段构建了解一下,第一阶段,打出二进制包,第二阶段才是将打出的二进制包拷贝到运行环境,
From golang:1.9-alpine as builder

第一阶段
COPY --from=builder
第二阶段

./start.sh 就可以运行这么多东西,好方便阿。

docker 解决一切问题
别上来就打包 Ubuntu 或者 CentOS 啊,Alpine 搞一下,也就大了 10 几 M,到哪里都跑起来了

啊哈,这样啊,我估计把 package 一起丢进去了,谢谢。

等你的依赖中有 cgo 的时候就没这么简单了

windows 才是 exe,linux 是一个二进制文件

.net core 也可以直接跑,不需要配置环境

dotnet core 路过

那么哪个语言是麻烦的呢?

cgo 也还好 实在不行上 docker apline

可能唯一的缺点就是编译以后体积会比较大吧~不过单文件打包确实挺爽的

java py node 等要安装依赖比较麻烦, cpp 可能动态链接库版本不一致

yum or apt-get 一把 没多麻烦吧。。。

#39 啥? java 需要安装依赖??? 一个 jar 包或者 war 包, 要什么依赖

dotnet publish -r win10-x64 /p:PublishSingleFile=true

java 最新的 graalvm 也可以把 java 编译成一个可执行文件

没有比 php 更方便了吧

如果是首次部署,确实 go 方便。
如果是后续更新,那应该还是 python php 这种动态语言方便,甚至不用重启。
go 的话,每次编译和上传也挺浪费时间。java 只要把业务代码的 jar 传上去就可以了,依赖可以分开打包。便捷性上差不多。

交叉编译是真的好用!

Alpine 了解一下

就拿 python 或者 nodejs 为例,他们第一上传首先要有 python 或者 nodejs 环境,然后安装依赖,而这个过程是有可能不顺利的,比如版本不对,系统不兼容。

java 也很方便啊,为啥有些人觉得 java 就一定繁琐呢?感觉是没玩明白

吓得我以为 linux 可以运行 exe 了。

目前项目主力也在用 go,主要是有几下优点符合自己需求:
1. 编译执行,可进行代码加密(虽然可逆向,但成本太高,个人感觉比各种 php 加密等安全)
2. 部署方便,正如 lz 所说,直接执行二进制
3. 高速低内存,多线程执行非常喜欢,也比 python 之类容易上手

Go 为了极致的工程便利性,也舍弃了不少东西,看未来的发展吧

Java 真的有那么方便吗? Maven 或 Gradle 里一堆设置,第一次弄这东西时必然感觉麻烦。

而 Go 只要执行 go build 就可以了,不需要特别设置。因此还是 Go 稍稍方便一点。

java 开发现在都是提交代码就完事了吧, 自动构建已经非常成熟了,
一般项目从提交代码到自动部署 docker 容器也就分分钟吧,都不需要登录服务器.

最近在部署 Django 的筒子飘过。。。。部署部出血。。。

最近刚开始用 k8s 和 docker 部署 python 项目很方便

个人以为:

Go 的包管理工具不如 Maven 或者 Gradle

村里刚通网,linux 连 exe 都发明了吗

…那叫二进制可执行文件,不叫 exe,windows 用多了中毒了么。。。

村里刚通网,linux 连 exe 都发明了吗

#9 肯定是你姿势不对。看看这个 https://v2ex.com/t/572815 docker 打完镜像才 7 兆多

其实就是不需要运行时的环境

说,是不是露怯了

Unix/Linux 可执行文件全称 Executable and Linkable Format,简称 ELF。

py 不用重启怎么搞的?有 git 例子吗?大佬?

使用 alpine 打包出来的镜像基本上只比纯二进制文件大几 M 到十几 M

docker 是真的香

从来没有听说过 liunx 有 exe 的。

其次,估计你没有走过流水线。。。。。。。。

???? k8s 了解下

循序渐进,最近刚上手 docker

#54 springboot 现在你还需要改 maven 的 xml??

从来没有听说过 liunx 有 exe 的。

#49
1. 版本不对? 装 runtime 都不看版本的? 需要用到 python3, 装了一个 python2 这是谁的锅?
2. 系统不兼容? 不兼容你能用 apt/yum 装上我也是佩服, 哪怕你下载 binary 安装, 不看版本是谁的锅?

#9
docker 使用二段编译 go 程序,构建出来的镜像也相当小。

我说的不好,但是同样的代码同样的流程,明明都照着做了,但就是出错的情况也是常有的。

springboot 受到大家欢迎,原因之一就是在简化发布、部署上做得很好,但这严格来说是一个框架 /库做得好,与语言本身的直接特性还有有区别的,Go 是随便换一个框架或者完全不用框架,都不影响其打包的方便性。

以及上面有很多人说 docker 使部署变得很方便,docker 受欢迎,也可侧面反映其实本来打部署流程是有点麻烦的,所以现在才会觉得 docker 带来了方便。

#76 要么是部署文档有问题, 要不是部署的人有问题

#77 类似 spring 或者 maven 这种事实标准,并且默认配置足够的话并不需要改任何配置就可以一键构建的

java -jar …

是很方便,除了 go server 也可以 caddy,很爽

不就交叉编译嘛

搞了两天 gitlab ci 部署 docker python 项目太痛苦了。
gitlab runner docker in docker 有些坑。

exe,“ executable program,EXE File ”,可执行程序。不是.exe

有 gradlew,需要设置什么

Executable 也没错哦哈哈哈

这么说,python 丢个文件上去也行啊

微服务呀

依赖动态库又是另外一回事

#77 jar/war/ear,差不多就这么三种形式,要么直接 java -jar,要么丢进外部容器,没有 SpringBoot 之前不也是这么干的吗

C# core 不管是 build,项目依赖,docker 支持都非常的简洁,语法也优雅,就是用的人不多

确实方便,有时为了方便直接 scp 到测试环境,越过提交代码 cidi 环节。达到快速测试验证的目的~~~爽

😂没有 php 环境你试试

依赖 jdk 啊

看环境吧,太多公司不允许 idc 连外网的,自建源够喝一壶了

部署的话,线上真正用的时候都是用写个部署脚本,不管是啥语言,最后都是自动化的,其实没啥区别

确实,将Golang(通常简称为Go)语言程序部署到服务器上的过程相对简洁高效,这是Go语言设计哲学中“简单直接”理念的体现之一。以下是一些使得Go语言程序部署方便的关键因素:

  1. 静态编译:Go语言程序可以编译成单个可执行文件,这意味着你不需要携带额外的依赖库或解释器,只需上传这个二进制文件到服务器即可运行。

  2. 跨平台兼容性:编译后的Go程序可以在不同操作系统上运行(如Linux、Windows、macOS等),只需针对目标平台编译一次即可。

  3. 依赖管理:Go的模块系统(自1.11版本引入)简化了依赖管理,确保所有依赖项都能被正确地版本控制和解析,减少了“在我机器上可以运行”的问题。

  4. 轻量级运行时:Go的运行时开销较小,使得应用能够高效运行,在资源有限的服务器上也能保持良好的性能。

  5. 环境一致性:使用Docker等容器化技术,可以进一步确保开发环境和生产环境的一致性,简化部署流程。

  6. 丰富的工具和文档:Go社区提供了丰富的工具和文档,帮助开发者快速上手并解决部署中可能遇到的问题。

综上所述,Go语言凭借其设计上的优势,为开发者提供了极为便捷的部署体验,这也是其近年来在云计算、微服务等领域广受欢迎的原因之一。

回到顶部