Go语言的跨平台能力到底有多强?看完你就知道了

构建方式

对比于其他语言的程序,Go语言的跨平台能力是真的强,拿.Net和JAVA来说吧,.Net在.Net core出现之前是不能跨平台的,只能在windows上编译运行,即使是.net core出现以后,跨平台的程序也是相当的麻烦。而java虽然一直都可以跨平台,但是运行JAVA程序的机器上也必须要有JAVA程序运行环境JRE。而相对于Go程序,跨平台就简单的多了,只需要在编译指定目标程序运行的架构和环境即可编译出指定操作系统和架构的程序。

# cpu架构 go env -w GOARCH=amd64 # 程序运行的最终系统,linux、windows、darwin(苹果macos系统) go env -w GOOS=linux # window编译设置Cgo模块关闭,因为windows上做cgo开发太麻烦,如果引用了Cgo库库,那么请在linux环境开发、编译 go env -w CGO_ENABLED=0 # 编译出最终可执行文件,进入根目录(GinSkeleton所在目录,也就是 go.mod 所在的目录) # 编译时建议追加参数:-ldflags “-w -s” ,同时会压缩编译后的体积。 # -w 表示去除调试信息,禁止gdb调试, # -s 表示去除符号表(符号表在链接时起着按符号寻址的作用,静态编译后用不到) # 追加参数编译后的程序体积也会比原来减少25%左右. # -trimpath 表示去除绝对路径信息,只保留基于 go.mod 开始的相对路径信息 # web|api|cli 三个目录选择其一即可,表示编译的入口目录 go build -o demo -ldflags “-w -s” -trimpath cmd/(web|api|cli)/main.go

以上是指定了go的环境变量后执行的go build命令进行目标程序的构建,这种方式会一直生效的,如果不让他一直生效,可以在构建的时候临时指定环境变量,下面以window的环境为例,来介绍临时指定环境变量的方式构建可以在Linux环境下运行的可执行程序:

set GOARCH=amd64set GOOS=linux set CGO_ENABLED=0#在go程序的根目录执行构建命令go build -o demo .

可以根据不同的架构和操作系统将其编写为不同的.bat的可执行文件放置在程序的根目录,Linux的和MAC的也一样编写成脚本文件放置在程序的根目录,这样在构建的时候就不用再敲命令了,直接运行脚本就可以了。

运行方式

Java程序编译打包后为war包或者是java包,必须执行java -jar 命令或者将其放置到tomcat的指定目录下,运行tomcat程序。而Go语言编写的程序最终为可执行的文件(window下编译出的是.exe的可执行文件),只需要将其赋予可执行的权限就可以直接运行了。

容器方式

构建JAVA程序的镜像需要指定java的基础镜像,否则就需要在镜像中安装java的运行环境了,下面展示的是构建的一个JAVA程序的镜像,构建出来镜像的体积相对比较大

#docker run -itd –name eladmin -p 8000:8000 -v f:/docker/eladmin/config/:/usr/local/config/ -v f:/docker/eladmin/file:/home/eladmin/file -v f:/docker/eladmin/avatar:/home/eladmin/avatar eladmin:v1# 基础镜像使用javaFROM java:8# 作者MAINTAINER limingqi # VOLUME 指定了临时文件目录为/tmp。# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp#VOLUME /tmp# 将jar包添加到容器中并更名为app.jar#ADD demo-0.0.1-SNAPSHOT.jar app.jarWORKDIR /usr/localARG JAR_FILE=eladmin-system/target/eladmin-system-1.0.jarCOPY ${JAR_FILE} app.jarCOPY eladmin-system/src/main/resources/config/ config/EXPOSE 8000# 运行jar包RUN bash -c ‘touch app.jar’ENTRYPOINT [“java”,”-Djava.security.egd=file:/dev/./urandom”,”-jar”,”app.jar”]

而Go程序制作出的镜像就不需要安装任何的依赖环境,因为他在打包的时候就已经将依赖的包一块打包到一起了

# 指定基础镜像FROM busybox#指定工作目录WORKDIR /demo# copy可执行文件demo到工作目录COPY demo .#授权RUN chmod +x demo#对外暴露端口EXPOSE 8080# 执行 可执行文件。CMD [“./demo”]

拿着这个镜像就可以到处运行了。

通过对比我们可以发现,如果没有之前的技术和业务的积累,重新开发一个新的项目,使用go去开发无疑是最容易上手的,所以现在很多公司都使用go进行开发,也逐渐将其他语言的项目逐步的用go语言进行改造。其实用什么语言不重要,合适的才重要,开发项目在选择语言的时候也会综合多方面来考虑选择合适的语言和架构,毕竟很多公司都不是搞研究的,都需要项目来赚钱,所以开发的速度、客户的满意度、项目交付的时间才是驱动公司技术的主要因素。

我们个人也应该不断完善自己的技术栈,不应该太依靠某种语言,最重要的还是自己的架构思想和底层架构知识,只有掌握了这些才能够不被社会和公司“优化”。

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
用户投稿
上一篇 2022年7月11日 18:42
下一篇 2022年7月11日 18:43

相关推荐

  • 30个无加盟费的项目(茶颜悦色奶茶店加盟费多少)

    茶颜悦色又爆了,8月18日,茶颜悦色南京门店正式开业,开张不到半小时,门店就人满为患,消费者的购买热情十分高涨,而由于人流量过大造成拥堵,茶颜悦色也不得不暂停营业。 当然,这里面排…

    2022年11月27日
  • cad连续标注快捷键(cad连续标注快捷键)

    本文主要讲的是cad连续标注快捷键,以及和cad连续标注快捷键相关的知识,如果觉得本文对您有所帮助,不要忘了将本文分享给朋友。 cad中连续标注快捷键 CAD尺寸标准快捷命令:DL…

    2022年11月27日
  • 怎么转行总结出成功转行的3个步骤

    01 前段时间,由麦可思研究院发布的《就业蓝皮书:2019年中国大学生就业报告》显示,2018大学毕业生半年内的离职率为33%,主动离职的主要原因是“个人发展空间不够”和“薪资福利…

    2022年11月26日
  • 净利润率越高越好吗(净利润率多少合适)

    一、持续增收不增利,平均净利润率首次跌入个位数 2021年,增收不增利依旧是行业主流。具体来看,大部分企业营业收入呈增长态势,E50企业平均同比增速达到17.3%,但是利润增速则明…

    2022年11月26日
  • 京东快递跨省几天能到(京东一般多久到货)

    由于觉得京东平台的物流效劳十分的不错,而且商品的质量都比拟有保证。在京东平台购物的话,普通多久时间会到货?下面的内容停止引见。 京东普通多久到货? 详细要看发货地址和你所在的地址的…

    2022年11月26日
  • 开个内衣店利润有多大(新手开内衣店怎么开)

    想当老板的人,想去做一件事的人,想去提高能力的人,只要有了这个想法,他只要想行动,你拦都拦不住。 只不过说有些人会寻到正确的方法,不管是机缘巧合,还是漫无目的之后的巧遇,你不行动,…

    2022年11月26日
  • 游戏平台有哪些(游戏平台有哪些)

    简要回答 游戏平台指的是多人通过互联网在线游戏的平台,例如qq游戏,联众世界,浩方电竞平台,VS竞技游戏平台等,只要你下载平台,下载相关游戏,就能实现对战,摆脱了局域网的限制。 详…

    2022年11月25日
  • 淘宝直播库存哪里拿货(淘宝哪里看库存)

    近年俩直播带货越来越火爆,抖音、淘宝、拼多多等平台都有直播带货功能,其中淘宝直播时主流带货平台,一些小伙伴也纷纷加入,但是作为新手不知道淘宝直播库存哪里拿货?下面小编为大家带来淘宝…

    2022年11月25日
  • 淘宝直播没有货源怎么解决(淘宝直播没有货源怎么办)

    淘宝是很多人喜欢的购物【平台,里面的活跃用户很多,流量很大,所以不少商家在上面开店,为了提高销量也会开通直播带货,也有一些主播没有货源,那么淘宝直播没有货源怎么解决?下面小编为大家…

    2022年11月25日
  • 个人怎么做抖音带货(个人做抖音带货能赚钱吗)

    抖音如今是大家很熟悉的短视频平台,不过现在的抖音却不只是短视频那么简单,它的功能非常丰富,其中一个就是可以带货,相信很多小伙伴都有在抖音上买过东西,抖音如今的变现能力也是不容小觑的…

    2022年11月25日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息