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

 咿呀最有味先 发布于 2023-02-12 14:23

我非常喜欢使用GO可以获得的许多任务的交叉编译/平台简易性.我想,我有一个问题,相当于#ifdef/#else类型的构造,用于根据操作系统执行/编译函数.

这是场景 - 假设我有一个函数将信息插入操作系统的控制结构,以便在用户下次启动系统时启动进程.在Windows上,我会更新用户的'RUN/RUNONCE'注册表项,在MAC上会有plist条目等.

从本质上讲,我希望能够编写类似于此的人(或者具有超载的OS特定功能):

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平台创建相同程序的多个项目树.

谢谢!

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

    例如:

    your_package_linux.go

    your_package_darwin.go

    your_package_windows.go

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

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

    2023-02-12 14:26 回答
  • 你可以阅读有关建立约束这里http://golang.org/pkg/go/build/(你可以让三个文件,每个文件都有一个特定的操作系统的逻辑),
    或者你可以检查runtime.GOOS的OS名字串

    2023-02-12 14:26 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有