当前位置:首页 > 科技  > 软件

关于 Go 的高级构建指南

来源: 责编: 时间:2024-06-20 15:22:09 263观看
导读构建选项以下是 go build 命令最常用的一些选项:-o: 指定输出文件名。默认输出文件名是主软件包的名称,在 Windows 系统中会自动添加 .exe 后缀。-v: 详细输出。该选项会在编译时打印软件包的名称。-work: 打印临时工作

o3j28资讯网——每日最新资讯28at.com

构建选项

以下是 go build 命令最常用的一些选项:o3j28资讯网——每日最新资讯28at.com

  • -o: 指定输出文件名。默认输出文件名是主软件包的名称,在 Windows 系统中会自动添加 .exe 后缀。
  • -v: 详细输出。该选项会在编译时打印软件包的名称。
  • -work: 打印临时工作目录,退出时不删除。该选项对调试很有用。
  • -x: 打印指令。该选项可打印 go build 正在执行的指令。
  • -asmflags: 传递给 go tool asm 调用的参数。
  • -buildmode: 要使用的编译模式。默认构建模式为 exe。其他可能的值包括shared、pie和plugin。
  • -buildvcs: 是否在二进制文件中加入版本控制信息。默认值为auto(自动)。

有关 go build 命令的更多信息,可以运行以下命令:o3j28资讯网——每日最新资讯28at.com

go help build

包含哪些文件

在 Go 中使用 go build 命令时,会编译当前目录及其子目录中的 Go 源文件,以创建可执行的二进制文件。默认情况下只编译 .go 文件,而忽略目录中的其他文件类型。不过,值得注意的是,go build 命令的行为可能会受到构建标签和构建约束的影响。o3j28资讯网——每日最新资讯28at.com

go build 通常会忽略以下类型的文件:o3j28资讯网——每日最新资讯28at.com

(1) 扩展名不是 .go 的文件:o3j28资讯网——每日最新资讯28at.com

目录中任何没有 .go 扩展名的文件都将被忽略,包括文本文件、配置文件、图片等。o3j28资讯网——每日最新资讯28at.com

(2) 子目录中的文件:o3j28资讯网——每日最新资讯28at.com

go build 命令编译当前目录及其子目录中所有 .go 文件,其他文件和目录通常会被忽略。o3j28资讯网——每日最新资讯28at.com

(3) 以下划线或点号开头的文件:o3j28资讯网——每日最新资讯28at.com

go 工具会忽略以 . 或 _ 开头的目录和文件名,以及名为 testdata 的目录。o3j28资讯网——每日最新资讯28at.com

(4) 被构建约束排除的文件:o3j28资讯网——每日最新资讯28at.com

Go 支持构建约束,允许根据目标操作系统或体系架构等条件,构建过程中包含或排除特定文件。例如,在为非 Windows 平台构建时,带有 //go:build windows 等构建约束的文件将被忽略。o3j28资讯网——每日最新资讯28at.com

(5) 通过构建标签排除的文件:o3j28资讯网——每日最新资讯28at.com

构建标签是 Go 源文件中的特殊注释,可用于根据自定义条件指定哪些文件应包含在编译中。如果文件的构建标记与构建上下文不匹配,则会被忽略。o3j28资讯网——每日最新资讯28at.com

(6) "testdata"目录中的文件:o3j28资讯网——每日最新资讯28at.com

testdata 的目录中的文件将被忽略。该目录通常用于包含与测试相关的数据,而这些数据并不需要编译。o3j28资讯网——每日最新资讯28at.com

构建标签

Go 的构建标签提供了一种强大的机制,可在构建过程中包含或排除特定代码。通过使用构建标签,开发人员可以定制自己的应用程序,使其适用于不同的构建配置、环境或特定平台要求。这一功能在处理交叉编译或为特定操作系统创建二进制文件时尤为重要。o3j28资讯网——每日最新资讯28at.com

构建标签是放在 Go 源文件开头的注释,指定了一组条件,标识在这些条件下,该文件中的代码应被包含或排除在联编过程之外。语法是 //go:build 。例如,考虑这样一种情况:只有在为应用程序的某个版本构建时,才会包含一段特定的代码:o3j28资讯网——每日最新资讯28at.com

main.goo3j28资讯网——每日最新资讯28at.com

package mainimport "fmt"var version stringfunc main() {    fmt.Println(version)}

pro.goo3j28资讯网——每日最新资讯28at.com

//go:build propackage mainfunc init() {    version = "pro"}

free.goo3j28资讯网——每日最新资讯28at.com

//go:build freepackage mainfunc init() {    version = "free"}

当使用 -tags=free 时,输出将是 free,因为 free.go 文件已包含在内。而使用 -tags=pro 时,输出将是 pro。o3j28资讯网——每日最新资讯28at.com

构建标签语法

可以像使用编程中的其他条件语句一样组合约束条件,如 AND、OR、NOT。o3j28资讯网——每日最新资讯28at.com

NOT:o3j28资讯网——每日最新资讯28at.com

//go:build !cgo

只有在未启用 CGO 的情况下,才会在构建过程中包含该文件。o3j28资讯网——每日最新资讯28at.com

AND:o3j28资讯网——每日最新资讯28at.com

//go:build cgo && darwin

只有启用 CGO 并且 GOOS 设置为 darwin 的情况下,才会在构建过程中包含该文件。o3j28资讯网——每日最新资讯28at.com

OR:o3j28资讯网——每日最新资讯28at.com

//go:build darwin || linux

组合使用:o3j28资讯网——每日最新资讯28at.com

//go:build (linux || 386) && (darwin || !cgo)

注意:1.16 及更早版本的 Go 使用了不同的构建约束语法,前缀为 // +build。当遇到旧语法时,gofmt 命令将添加等效的 //go:build 约束。o3j28资讯网——每日最新资讯28at.com

构建约束

除了使用构建参数设置自定义构建标签,golang 也会根据环境变量和其他因素自动设置一些标签。以下是可用标记的列表:o3j28资讯网——每日最新资讯28at.com

(1) GOOS 和 GOARCH 环境变量o3j28资讯网——每日最新资讯28at.com

可以在源代码中设置限制条件,只有在使用了特定 GOOS 或 GOARCH 时才能运行文件,例如:o3j28资讯网——每日最新资讯28at.com

//go:build darwin,amd64package utils

(2) GO 版本限制o3j28资讯网——每日最新资讯28at.com

可以根据构建整个模块时使用的 go 版本来约束是否包含文件。例如,要只在使用 go 版本为 1.12 及以上时构建文件,可以使用 //go:build go1.18。如果 go 的版本是 1.18 或 1.21(截至本文撰写时的最新版本),则会包含该文件。o3j28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-95158-0.html关于 Go 的高级构建指南

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C# 中的占位符替换五种方式

下一篇: C#中Attribute的魅力:从基础到高级AOP实战

标签:
  • 热门焦点
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 新电商三兄弟,“抖快红”成团!

    来源:价值研究所作 者:Hernanderz 随着内容电商的概念兴起,抖音、快手、小红书组成的“新电商三兄弟”成为业内一股不可忽视的势力,给阿里、京东、拼多多带去了巨大压
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大“烤”之下的除了众生,还有各大企业发布的ESG报告。ESG是“环境保
  • 英特尔Xe-HP项目终止,将专注Xe-HPC/HPG系列显卡

    据10 月 31 日消息报道,英特尔高级副总裁兼加速计算系统和图形事业部总经理 表示,Xe-HP“ Arctic Sound” 系列服务器 GPU 已经应用于 oneAPI devcloud 云服
  • 荣耀Magicbook V 14 2021曙光蓝版本正式开售,拥有触摸屏

    荣耀 Magicbook V 14 2021 曙光蓝版本正式开售,搭载 i7-11390H 处理器与 MX450 显卡,配备 16GB 内存与 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 键盘键程、
  • onebot M24巧系列一体机采用轻薄机身设计,现已在各平台开售

    onebot M24 巧系列一体机目前已在线上线下各平台同步开售。onebot M24 巧系列采用一体化轻薄机身设计,最薄处为 10.15mm,拥有宝石红、午夜蓝、石墨绿、雅致
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
Top