gpt4 book ai didi

go - 在 Go 中封装平台特定代码的正确方法是什么?

转载 作者:IT王子 更新时间:2023-10-29 00:40:22 24 4
gpt4 key购买 nike

我想开发一个小型 Go 应用程序,它向演示文稿的听众显示使用的击键快捷方式。

为了连接到键盘事件,我将不得不使用一些特定于平台的代码。 封装平台特定代码的 Go 方法是什么?我一直在搜索编译器开关或平台模块等关键字,但我真的找不到相关内容。

最佳答案

平台特定代码的解决方案是build constraints .

注意:在 Go 1.17 之前,语法是以 //+build 开头的注释行,但 Go 1.17 引入了 //go :build pragma 现在是首选方式。

A build constraint, also known as a build tag, is a line comment that begins

//go:build

that lists the conditions under which a file should be included in the package. Constraints may appear in any kind of source file (not just Go), but they must appear near the top of the file, preceded only by blank lines and other line comments. These rules mean that in Go files a build constraint must appear before the package clause.

所以基本上每个平台特定的 Go 代码都应该放在不同的文件中,并且您可以用它们的目标标记每个 Go 文件。

例如,如果文件包含特定于 Linux 的代码(例如系统调用),则以:

//go:build linux

如果文件包含特定于 Windows 的系统调用,则以以下方式启动它:

//go:build windows

还有更多“选项”可用,请阅读链接文档。例如,您可以指定对操作系统、体系结构、Go 版本、正在使用的编译器的约束。您还可以指定将使用逻辑 OR 或 AND 解释的多个约束,或者您可以使用否定(例如,此代码适用于除 linux 之外的每个目标平台)。

您甚至可以使用以下约束标记要忽略的 .go 文件:

//go:build ignore

请注意,构建约束是特定于编译器的。如果特定编译器无法识别构建约束,则编译器将忽略该文件。例如,Go AppEngine SDK 带有一个内置的、经过修改的 Go 编译器,它还可以识别

//go:build appengine

约束,这意味着源文件仅适用于 Google App Engine 平台。 “常规”Go 编译器将忽略该文件,如果有人试图在没有 Go AppEngine SDK 的情况下构建代码,您就不会出现一堆编译器错误。

关于go - 在 Go 中封装平台特定代码的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35428963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com