Go语言的跨平台能力到底有多强?看完你就知道了对比于其他语言的程序,Go语言的跨平台能力是真的强 , 拿.Net和JAVA来说吧,.Net在.Net core出现之前是不能跨平台的,只能在windows上编译运行,即使是.net core出现以后,跨平台的程序也是相当的麻烦 。而java虽然一直都可以跨平台,但是运行JAVA程序的机器上也必须要有JAVA程序运行环境JRE 。而相对于Go程序,跨平台就简单的多了,只需要在编译指定目标程序运行的架构和环境即可编译出指定操作系统和架构的程序 。
以上是指定了go的环境变量后执行的go build命令进行目标程序的构建,这种方式会一直生效的 , 如果不让他一直生效,可以在构建的时候临时指定环境变量,下面以window的环境为例 , 来介绍临时指定环境变量的方式构建可以在Linux环境下运行的可执行程序:
可以根据不同的架构和操作系统将其编写为不同的.bat的可执行文件放置在程序的根目录,Linux的和MAC的也一样编写成脚本文件放置在程序的根目录,这样在构建的时候就不用再敲命令了,直接运行脚本就可以了 。
Java程序编译打包后为war包或者是java包,必须执行java -jar 命令或者将其放置到tomcat的指定目录下,运行tomcat程序 。而Go语言编写的程序最终为可执行的文件(window下编译出的是.exe的可执行文件) , 只需要将其赋予可执行的权限就可以直接运行了 。
构建JAVA程序的镜像需要指定java的基础镜像 , 否则就需要在镜像中安装java的运行环境了,下面展示的是构建的一个JAVA程序的镜像,构建出来镜像的体积相对比较大
而Go程序制作出的镜像就不需要安装任何的依赖环境,因为他在打包的时候就已经将依赖的包一块打包到一起了
拿着这个镜像就可以到处运行了 。
通过对比我们可以发现 , 如果没有之前的技术和业务的积累,重新开发一个新的项目,使用go去开发无疑是最容易上手的 , 所以现在很多公司都使用go进行开发,也逐渐将其他语言的项目逐步的用go语言进行改造 。其实用什么语言不重要,合适的才重要,开发项目在选择语言的时候也会综合多方面来考虑选择合适的语言和架构,毕竟很多公司都不是搞研究的,都需要项目来赚钱,所以开发的速度、客户的满意度、项目交付的时间才是驱动公司技术的主要因素 。
我们个人也应该不断完善自己的技术栈 , 不应该太依靠某种语言,最重要的还是自己的架构思想和底层架构知识,只有掌握了这些才能够不被 社会 和公司“优化” 。
golang编写的项目 , 使用alpine制作镜像遇到的一个问题解决 GraphicsMagick,一款高性能的图片处理工具,由于项目需要,用到它 , 自然而然用到了关于gm的第三方库这个库按照作者的提示,要安装GraphicsMagick-devel依赖 。
项目写完了,接下来用alpine做为基础镜像,准备制作项目的镜像 。
golang项目,是在ubuntu下编写的 , 编译成二进制文件了,只要把二进制文件放进镜像里即可,遇到的问题有2个
【go语言镜像 go语言映射】1 容器跑起来,一直报二进制文件no found
我认认真真的确认了文件 , 以及它的路径 , 确实是存在的,怎么会报文件找不到呢?!
原来是musl和glibc是兼容的问题 , 在Dockerfile里要加以下两步
2 Error loading shared library libGraphicsMagickWand-Q16.so.2: No such file or directory
明明按要求安装GraphicsMagick-devel依赖,为啥还报这种错
于是想到了,是不是也要ln做一下软链接呢?于是学着上面的样子在Dockerfile里补上
再跑,问题依旧,莫非是软连接的地址写错了!回到开发的电脑上用ldd命令查看一下
果然 , 编译后的二进制文件依赖路径是/lib,而不是/lib64
于是,修改Dockerfile里的写法
问题解决,开心:)
参考资料:
Go语言安装与镜像配置 安装网址
国内镜像
Go 1.13 及以上(推荐
打开你的终端并执行
macOS 或 Linux
或
如果是zsh
请这样设置
Windows
打开PowerShell 并执行
或者
然后你就可以
构建go应用镜像 使用golanggo语言镜像的镜像编译golang 应用
但是,如果用到了vendor自己本地go语言镜像的库的话 , 这个里就行不通,解决方案就是
先创建一个包含所有工程的完整镜像,在用这个镜像来编译引用
Dockerfile_compile
Dockerfile_build
如何使用Go语言是操作DockerDocker 提供了一个与 Docker 守护进程交互的 API (称为Docker Engine API)go语言镜像,我们可以使用官方提供的 Go 语言的 SDK 进行构建和扩展 Docker 应用程序和解决方案 。
转自go语言镜像:
整理go语言镜像:地鼠文档
通过下面的命令就可以安装 SDK 了:
该部分会介绍如何使用 GolangDocker API 进行管理本地的 Docker 。
第一个例子将展示如何运行容器go语言镜像,相当于docker run docker.io/library/alpine echo "hello world":
还可以在后台运行容器 , 相当于docker run -d bfirsh/reticulate-splines:
列出正在运行的容器,就像使用docker ps一样:
如果是docker ps -a,我们可以通过修改types.ContainerListOptions中的All属性达到这个目的:
通过上面的例子,我们可以获取容器的列表 , 所以在这个案例中,我们可以去停止所有正在运行的容器 。
通过指定容器的 ID,我们可以获取对应 ID 的容器的日志:
获取本地所有的镜像,相当于docker image ls或docker images:
拉取指定镜像,相当于docker pull alpine:
除了公开的镜像,我们平时还会用到一些私有镜像,可以是DockerHub上私有镜像,也可以是自托管的镜像仓库,比如harbor。这个时候,我们需要提供对应的凭证才可以拉取镜像 。
值得注意的是:在使用Docker API的Go SDK时,凭证是以明文的方式进行传输的,所以如果是自建的镜像仓库,请务必使用HTTPS!
我们可以将一个已有的容器通过commit保存成一个镜像:
当然,除了可以管理本地的Docker,我们同样也可以通过使用GolangDocker API管理远程的Docker。
默认Docker是通过非网络的Unix套接字运行的 , 只能够进行本地通信(/var/run/docker.sock),是不能够直接远程连接Docker的 。
我们需要编辑配置文件/etc/docker/daemon.json,并修改以下内容(把192.168.59.3改成go语言镜像你自己的IP地址),然后重启Docker:
创建client的时候需要指定远程Docker的地址,这样就可以像管理本地Docker一样管理远程的Docker了:
现在已经有很多可以管理 Docker 的产品,它们便是这样进行实现的 , 比如:portainer。
关于go语言镜像和go语言映射的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。
推荐阅读
- js禁止代码怎么办,javascript禁用了怎么办
- 什么牌子电视不用有线电视,什么牌子的电视可以不用机顶盒
- 直播拍摄绿幕素材,直播拍摄绿幕素材图片
- linux命令行显示分页 linux 命令分页显示
- 怎么创立微信视频号,如何创办微信视频号
- pythonmysql数据导出,python把数据导入数据库
- 海盗小游戏经营,海盗游戏的攻略
- php数据展示页面 php实现页面浏览量
- 建材家装如何做网络推广,建材家装如何做网络推广赚钱