为了账号安全,请及时绑定邮箱和手机立即绑定

在运行时为不同操作系统选择 func 的正确方法

在运行时为不同操作系统选择 func 的正确方法

Go
侃侃尔雅 2021-06-29 17:24:45
我真的很喜欢 GO 可以轻松完成的许多任务的交叉编译/平台操作。我有一个问题,我想,相当于 #ifdef / #else 类型的构造,用于执行/编译基于操作系统的函数。这是场景 - 假设我有一个函数可以将信息插入操作系统的控制结构中,以便在用户下次启动系统时启动进程。在 Windows 上,我会为用户更新“RUN/RUNONCE”注册表项,在 MAC 上会有一个 plist 条目等。本质上,我希望能够编写类似于此的内容(或重载操作系统特定功能):func setStartupProcessLaunch () {    if [OS is Windows] {        updateRegistry(){}    } else if [OS is Darwin] {        updatePlist(){}    } else if [OS is Linux] {        doLinuxthing() {}    }}给定静态编译,任何未被调用的例程都将被标记为编译错误。所以理想情况下,我想在#ifdef WINDOWS、#ifdef MAC 类型的块中包含我的“doSpecificOS()”函数——实现这一点的正确方法是什么?我希望我不需要为每个 OS 平台创建多个相同程序的项目树。
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

您可以使用以下模式创建文件: <pkgname>_<osname>.go

例如:

  • your_package_linux.go

  • your_package_darwin.go

  • your_package_windows.go

每个文件都可以包含具体操作系统的函数定义,在您的情况下它是func setStartupProcessLaunch().

例如,您可以看到它是如何在标准os/signal包中实现的


查看完整回答
反对 回复 2021-07-12
  • 3 回答
  • 0 关注
  • 230 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信