”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Go 条件编译中 `//go:build` 和 `// +build` 之间的主要区别是什么?

Go 条件编译中 `//go:build` 和 `// +build` 之间的主要区别是什么?

发布于2024-12-22
浏览:727

What are the key differences between `//go:build` and `//  build` in Go's conditional compilation?

//go:build 和 // build 之间的区别

在 Go 1.17 中,引入了一个名为 //go:build 的新条件编译指令来替代旧的 // 构建指令。虽然这两个指令都具有指定构建约束的相同目的,但使用 //go:build.

语法差异:

  • //go:build 有几个关键区别和优点遵循与其他 Go 指令类似的语法,例如 //go:generate。它接受一个布尔表达式作为参数,该参数确定在编译期间是否应将文件包含在包中。
  • // build,另一方面,使用不太直观的语法。它接受以逗号分隔的标签列表,以指定应包含该文件的平台或条件。

实现详细信息:

  • 在 Go 版本 1.17 及更高版本中, //go:build 是首选指令,将被工具链主动删除,如 Go 1.18 发行说明中所述。
  • // build will继续支持一些 Go 版本以确保平稳过渡,但在较新的版本中不鼓励使用它。

//go:build:

  • 的优点Consistency: //go:build 与 Go 的其他指令和编译指示保持一致,使其一致且更容易Remember.
  • 改进的语法: //go:build 提供了更标准的布尔表达式语法,使用 & 和 ||分别用于 AND 和 OR 条件。这与 // build 形成对比,后者使用逗号表示 AND,使用空格表示 OR。
  • Go fmt Support: //go:build 由 go fmt 支持,它会自动修复不正确的问题该指令在源文件中的位置。这有助于避免常见错误,例如指令和包语句之间不留空行。
  • 详细错误消息: //go:build 在编译过程中提供更详细的错误消息,帮助识别构建约束的任何问题。

用法:

虽然这两个指令都用于指定构建约束,但 //go:build 通常是首选,因为以其优势。下面是演示这两个指令用法的示例:

//go:build linux && amd64
package main

//  build linux,amd64
package main

在此示例中,两个指令将实现相同的结果,即仅在针对 Linux 和 64 位 AMD 架构进行编译时包含主包。

结论:

//go:build 与 // build 相比有几个优点,包括一致的语法、改进的错误消息和 go fmt 支持。它是 Go 1.17 及更高版本中指定构建约束的首选指令。

最新教程 更多>
  • 如何在MySQL中正确转义撇号:反斜杠或双撇号?
    如何在MySQL中正确转义撇号:反斜杠或双撇号?
    在 MySQL 中转义撇号:了解选项在 MySQL 中,通常认为撇号(单引号)可以是使用反斜杠字符 () 进行转义。然而,使用双撇号 ('') 代替转义序列似乎也有效,这引起了一些混乱。根据 MySQL 文档,这两种方法都是有效且可以互换的。具体来说,文档指出,“用 ' 引用...
    编程 发布于2024-12-22
  • HTML 格式标签
    HTML 格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2024-12-22
  • PHP 设计模式:页面控制器
    PHP 设计模式:页面控制器
    页面控制器设计模式是基于 Web 的系统中使用的常见架构方法。它通过专用特定控制器来处理单个页面或请求的逻辑来组织控制流。这种方法有助于隔离职责,使代码库更易于维护和发展。 什么是页面控制器? 在页面控制器模式中,每个页面(或一组具有相似行为的页面)都有自己的控制器,负责: 处理请求...
    编程 发布于2024-12-22
  • 尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    解决 PHP 中的 POST 请求故障在提供的代码片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"检查 $_POST数组:表单提交后使用 var_dump 检查 $_POST 数...
    编程 发布于2024-12-22
  • 日日理解 Python 中的字符串 |  天蟒
    日日理解 Python 中的字符串 | 天蟒
    第 8 天:Python 中的用户输入 | 100 天 Python 在 Python 中,字符串作为一种数据类型发挥着至关重要的作用,它允许您处理文本数据。在本博客中,我们将探讨字符串的基础知识、创建字符串的不同方法以及多行字符串、索引和循环字符串中的字符等高级概念。本指南将使您对字符串有深入的了...
    编程 发布于2024-12-22
  • 如何防止无效数独输入重新出现在 JFormattedTextFields 中?
    如何防止无效数独输入重新出现在 JFormattedTextFields 中?
    通过验证处理数独文本框开发数独游戏 GUI 时,确保文本框中的用户输入经过验证至关重要到游戏规则。在所描述的场景中,JFormattedTextField 用于文本框,但出现了一个问题,即在输入无效值并向前跳格后,以前的有效值重新出现。了解问题该问题源于 JFormattedTextField 的默...
    编程 发布于2024-12-22
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-12-22
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-12-22
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-12-22
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-12-22
  • 如何在 JavaScript 中可靠地将字符串转换为日期对象?
    如何在 JavaScript 中可靠地将字符串转换为日期对象?
    在 JavaScript 中将字符串转换为日期对象软件开发中的许多场景都涉及到日期和时间的处理。在 JavaScript 中,创建日期时,通常需要将表示日期的字符串转换为 Date 对象。下面是如何实现这种转换:推荐的字符串解析方法是利用 ISO 格式以及 Date 对象构造函数。例如:var st...
    编程 发布于2024-12-22
  • 如何摆脱Python中的循环依赖?
    如何摆脱Python中的循环依赖?
    如何在 Python 中避免循环依赖循环依赖可能是软件开发中的常见问题,尤其是在使用分层架构或复杂模块结构时。在 Python 中,循环依赖可能会导致多种问题,包括导入错误和属性错误。可能导致循环依赖的场景一个可能导致循环依赖的常见场景是两个类时依赖彼此的实例作为属性。例如:class A: ...
    编程 发布于2024-12-22
  • 在 JavaScript 中使用 setTimeout 时如何保留“this”引用?
    在 JavaScript 中使用 setTimeout 时如何保留“this”引用?
    setTimeout 和 JavaScript 中难以捉摸的“this”使用 setTimeout 函数时,开发者经常会遇到后续调用方法丢失的问题他们的预期上下文,导致看似未定义的方法。这通常是由于丢失“this”引用引起的。问题:考虑以下代码:test.prototype.method = fun...
    编程 发布于2024-12-22
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-12-22
  • 为什么使用 SwingUtilities.invokeLater?
    为什么使用 SwingUtilities.invokeLater?
    SwingUtilities.invokeLater:仔细观察在 Swing 编程领域,SwingUtilities.invokeLater 起着至关重要的作用。这个方法到底是做什么的,它与在主线程中直接执行代码有何不同?SwingUtilities.invokeLater,顾名思义,将给定 Run...
    编程 发布于2024-12-22

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3