当前位置: 首页 > news >正文

go语言同一包中的同一变量实现不同平台设置不同的默认值 //go:build 编译语法使用示例

在使用go来开发跨平台应用的时候,比如配置文件的路径,我们希望设置一个默认值,windows下的路径是类似  d:\myapp\app.conf 这样的, unix系统中的路径是 /opt/myapp/app.conf 这样的, 而我们在使用的时候需要使用的是同一个变量名来代表他们, 那么就要把 //go:build  这个请出来了, 他可以根据不同的平台来编译对应的go文件。

对于这类的信息我们一般只是模块内使用,那最好是是使用 internal文件夹来保护一下,如我们假设有如下2个文件来保存我们的默认配置信息:

internal/vars/defaults_notwin.go
internal/vars/defaults_windows.go

这2个文件内容如下:

defaults_notwin.go 

//go:build !windows
// 非windows系统编译package varsvar (DefaultConfigFile = "/opt/myapp/app.conf")

defaults_windows.go

package varsimport ("os"
)var (DefaultConfigFile        = os.Getenv("SYSTEMDRIVE") + `\myapp\app.conf`
)

可见他们的包名一样,2个文件里面定义的变量名也是一样的, 而我们的编译器却不会报错,这个是为什么呢? 

细心的你应该看出,在第一个文件defaults_notwin.go 的开头 有1行"注释"  //go:build !windows

注意,在//后面没有空格,这个是go里面的特殊用法,而注释通常在//后面是有一个空格的 

这个地方的 //go:build !windows 表示告诉编译器 当前文件在非windows系统时编译,而另外一个文件 defaults_windows.go  就只会在windows系统时才会编译, 则就保证了同一个包中使用了2个同名变量而不会报错。

我们在代码中要使用这个变量的时候就可以直接使用  confFileDefault := vars.DefaultConfigFile 而不用考虑当前平台是windows还是unix了。

http://www.lryc.cn/news/356767.html

相关文章:

  • 校园周边美食探索及分享平台,基于 SpringBoot+Vue+MySQL 开发的前后端分离的校园周边美食探索及分享平台设计实现
  • Discourse 编辑没有办法显示更多的 JS 错误
  • CSS实现一个雨滴滑落效果
  • vue2+echarts地图下钻+地图遮盖物散点
  • 关于C++的特殊类定制
  • Linux备份脚本
  • 【Unity】实现轮盘抽奖
  • 面下对象之overload与override
  • 大数据之Hive函数大全
  • 宝塔下应该用 Memcached 还是 Redis?
  • 恢复视频3个攻略:从不同情况下的恢复方法到实践!
  • 从git上拉取项目进行操作
  • ES升级--01--环境准备和安装
  • Linux 防火墙 firewalld 常用命令
  • 时间|基于SprinBoot+vue的时间管理系统(源码+数据库+文档)
  • C++青少年简明教程:for循环语句
  • 自动驾驶技术现状与需求分析
  • SQL生成自然数,日历序列 浅析
  • 【数据结构(邓俊辉)学习笔记】二叉树04——Huffman树
  • arcgisPro将一个图层的要素复制到另一个图层
  • 难兄难弟——Java中 goto 与 const关键字
  • 如何优化大文件读取时的性能
  • 【机器学习】Chameleon多模态模型探究
  • cv2.imdecode 和 cv2.imread 的区别
  • Android数据缓存框架 - 内存数据载体从LiveData到StateFlow
  • 多态的好处
  • Java基础语法---Stringjoiner
  • 大模型中的Tokenizer
  • Filebeat进阶指南:核心架构与功能组件的深度剖析
  • 深度神经网络