猿问

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

我真的很喜欢 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 平台创建多个相同程序的项目树。


侃侃尔雅
浏览 231回答 3
3回答

红颜莎娜

您可以使用以下模式创建文件:&nbsp;<pkgname>_<osname>.go例如:your_package_linux.goyour_package_darwin.goyour_package_windows.go每个文件都可以包含具体操作系统的函数定义,在您的情况下它是func setStartupProcessLaunch().例如,您可以看到它是如何在标准os/signal包中实现的。
随时随地看视频慕课网APP

相关分类

Go
我要回答