当前位置: 首页 > 后端技术 > PHP

Gin练习额外故事Golang交叉编译

时间:2023-03-29 22:23:19 PHP

项目地址:https://github.com/EDDYCJY/go...(上车,支持一波)原文地址:Golang交叉编译命令的一种形式,不知道大家有什么问题吗?$CGO_ENABLED=0GOOS=linuxgobuild-a-installsuffixcgo-ogo-gin-example。解释我们将解释该命令的每个参数的作用。希望大家在阅读的时候将每一项串联起来,你会发现这是交叉编译的小知识,也是Golang令人兴奋的特性之一。在标准go命令的上下文中,交叉编译意味着程序构建环境的目标计算架构的身份与程序执行环境的目标计算架构的身份不同,或者说目标运行环境的身份不同。程序构建环境的系统不同于程序执行环境的系统。操作系统不同标识总结:结合案例,我们是在宿主机上编译的可执行文件,和在Scratch镜像上运行的可执行文件;显然,两者的计算机架构和运行环境标识不能确定是否一致(毕竟构建的docker镜像也可以被其他人使用),那么我们就需要进行交叉编译,而交叉编译并没有支持cgo,所以我们需要在这里禁用它。关闭cgo后,在构建过程中会忽略cgo,所有依赖都是静态链接库,而打开cgo后,方法会改为动态链接补充:golang是默认打开cgo的工具,可以执行goenv命令检查$goenvGOARCH="amd64"GOBIN=""GOCACHE="/root/.cache/go-build"GOEXE=""GOHOSTARCH="amd64"GOHOSTOS="linux"GOOS="linux"...GCCGO="gccgo"CC="gcc"CXX="g++"CGO_ENABLED="1"...2.GOOS用于标识(声明)程序构建环境的目标操作系统,如:linuxwindows3.GOARCH是用于识别(声明)程序构建环境的目标计算架构。如果不设置,默认值与程序运行环境的目标计算架构一致(case是使用的默认值)如:amd64386systemGOOSGOARCHWindows32bitswindows386Windows64-bitwindowsamd64OSX32-bitdarwin386OSX64-bitdarwinamd64Linux32-bitlinux386Linux64-bitlinuxamd644.GOHOSTOS用于标识(声明)程序运行环境的目标操作系统5.GOHOSTARCH用于标识(declare)程序运行环境的目标计算架构6.gobuild-aforcesrecompilation。简单的说就是不使用缓存或者一些编译后的文件。所有包都直接重新编译并与最新代码相关联。-installsuffix作用:在包安装目录中添加后缀标识,使输出与默认版本分开补充:如果使用-race标识,后缀会默认设置为-race标识,以区别race和普通版本-o指定编译后的可执行文件的名称总结大多数参数说明都存在一定的相关性,与交叉编译的知识点相关。你可以有一个很好的品味。最后,您可以查看gobuildhelp以获得更深入的了解。$gohelpbuildusage:gobuild[-ooutput][-i][buildflags][packages]...-强制重建已经是最新的包。-n打印命令但不运行它们。-pn可以并行运行的程序的数量,例如构建命令或测试二进制文件。默认值是可用的CPU数。-race启用数据竞争检测。仅支持linux/amd64、freebsd/amd64、darwin/amd64和windows/amd64。-msan启用与内存清理的互操作伊泽尔。仅在linux/amd64上受支持,并且仅使用Clang/LLVM作为主机C编译器。-v在编译时打印包的名称。-work打印临时工作目录的名称,退出时不删除。-x打印命令。-asmflags'[pattern=]arglist'传递给每个gotoolasm调用的参数。-buildmodemode要使用的构建模式。有关更多信息,请参见“gohelpbuildmode”。-compilername要使用的编译器的名称,如在runtime.Compiler(gccgo或gc)中。-gccgoflags'[pattern=]arglist'传递给每个gccgo编译器/链接器调用的参数。-gcflags'[pattern=]arglist'传递给每个gotoolcompile调用的参数。-installsuffixsuffix在包安装目录的名称中使用的后缀,以便将输出与默认构建分开。如果使用-race标志,安装后缀自动设置为race,或者如果明确设置,则附加_race。同样对于-msan标志。使用需要非默认编译标志的-buildmode选项具有类似的效果。-ldflags'[pattern=]arglist'传递给每个gotool链接调用的参数。-linkshared指向先前使用-buildmode=shared创建的共享库的链接。-pkgdirdir从dir而不是通常的位置安装和加载所有包。例如,在使用非标准配置构建时,使用-pkgdir将生成的包保存在单独的位置。-tags'taglist'以空格分隔的构建标签列表,在构建过程中考虑满足。有关构建标签的更多信息,请参阅go/build包文档中构建约束的描述。-toolexec'cmdargs'用于调用工具链的程序vet和asm等程序。例如go命令不运行asm,而是运行'cmdargs/path/to/asm'....参考本系列示例代码go-gin-example本系列目录连载1Golang简介及环境安装连载2搭建博客API的(一)连载3搭建博客API的(二)连载4搭建博客API的(三)连载5使用JWT进行身份验证连载6写一个简单的文件日志连载7Golang优雅重启HTTP服务.连载8.给它加上Swagger。连载9.部署Golang应用到Docker连载10.自定义GORM回调实现Redis缓存连载14.实现导出导入Excel连载15.生成二维码合并海报第二版