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.mzph.cn/bicheng/18762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PPT忘记保存?教你如何轻松恢复

在日常办公中PPT文件作为主流文档格式,承载着我们大量的工作成果。然而当不小心误点了“不保存”按钮,或是遭遇软件崩溃等意外情况导致文档丢失时,文件内容是否还能够能恢复,往往成为我们最关心的问题。本文将为您提供五大免费且实…

NetCore PetaPoco 事务处理分享

PetaPoco是一个轻量级的.NET和Mono数据库访问库,它以单个C#文件的形式存在,便于集成到任何项目中。PetaPoco的主要特点包括无依赖性、快速的性能和对简单事务的支持。它适用于严格的没有装饰的Poco类以及几乎全部加了特性的Poco类,并提供了多…

现在版本的ultralytics没有setup.py以后,本地代码中修改了ultralytics源码,怎么安装到python环境中。

问题,在使用ultralytics训练yolov8-obb模型时,修改了ultralytics源码的网络结构,发现调用的还是pip install安装的ultralytics库,新版本源码中还没有setup.py,该怎么把源码中的ultralytics安装到环境中。 解决方法&am…

《探索网络七层模型:构建高效通信架构的关键》

在当今数字化时代,网络通信已经成为人们生活和工作中不可或缺的一部分。而网络七层模型作为计算机网络体系结构的重要基础,其技术架构对于构建高效、稳定的通信系统具有重要意义。本文将深入探讨网络七层模型的技术架构设计,以及其在构建现代…

轻松掌握图片批量处理,赶紧学习这些小技巧!

在现今数字化的社会中,我们每天都会接触到大量的图片,无论是在工作中还是日常生活中。要想高效处理这些图片,掌握图片批量处理的技巧就显得尤为重要。幸运的是,有许多小技巧和工具可以让这一过程变得轻松愉快。 在本文中&#xf…

长安链使用Golang编写智能合约教程(三)

本篇主要介绍长安链Go SDK写智能合约的一些常见方法的使用方法或介绍 资料来源: 官方文档官方示例合约库官方SDK接口文档 一、获取参数、获取状态、获取历史记录的方法解析 注意! 这些查询链上数据的方法:只能是查询本合约之前上链的数据&a…

信息学一周赛事安排

本周比赛提醒 本周有以下几场比赛即将开始: 1.ABC-356 比赛时间:6月1日(周六)晚20:00 比赛链接:https://atcoder.jp/contests/abc356 2.ARC-179 比赛时间:6月2日(周日)晚20:00 …

【Go】十、路由配置以及ZAP 高性能日志库的使用

Project 目录创建 mxshop-api user-web api ---- 服务接口 config ---- 配置信息 forms ---- 表单验证信息 global ---- 全局信息 initialize ---- 初始化信息 middlewares ---- 中间件信息 proto ---- 数据信息 router ---- 路由信息 utils ---- 公用工具信息 validator ----…

excel导到access后长文本内容缺失

参考该文Excel表格如何导入Access数据库以及列内容超过255个字符被截断解决办法 - 知乎 原因是access数据中列内容超过255个字符会被截断。 解决方法:将该字段的数据类型修改为长文本即可。

微调真的能让LLM学到新东西吗:引入新知识可能让模型产生更多的幻觉

大型语言模型(llm)是在巨大的文本语料库上训练的,在那里他们获得了大量的事实知识。这些知识嵌入到它们的参数中,然后可以在需要时使用。这些模型的知识在培训结束时被“具体化”。在预训练结束时,模型实际上停止学习。 对模型进行对齐或进行…

【VTKExamples::Utilities】第十四期 Screenshot

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例Screenshot,保存窗口快照,并解析接口vtkWindowToImageFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是…

SELINUX=enforcing时无法启动httpd服务的解决方案(semanage命令以及setroubleshoot-server插件的妙用)

一、问题描述: 当/etc/selinux/conf被要求必须是SELINUXenforcing,不被允许使用setenforce 0宽松模式 我们启动httpd就会报错: Job for httpd.service failed because the control process exited with error code. See "systemctl s…

如何安装ansible

ansible安装 1、 准备环境----关闭防护墙和selinux 一般用ansible不会少于10台以上 环境: 主机:4台 一个控制节点 3个被控制节点 解析:本地互相解析(所有机器) # vim /etc/hosts 192.168.1.10 ansible-web1 192.168.1.11 ansible-web2 192.168.1.12…

重生之 SpringBoot3 入门保姆级学习(08、properties 和 yml 表示复杂对象)

重生之 SpringBoot3 入门保姆级学习(08、properties 和 yml 表示复杂对象) 2.5 yml 配置文件2.6 复杂对象用 properties 表示2.7 复杂对象用 yml 表示 2.5 yml 配置文件 application.properties 配置文件书写形式 server.port9999spring.data.redis.hos…

Let‘s Encrypt 免费证书申请

填写邮箱,申请的域名 单域名:www.example.com 泛域名: *.example.com yum -y install certbot sudo certbot certonly --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns --email xxexample…

第23讲:Ceph集群RBD块存储的离线备份与还原

文章目录 1.RBD块存储的离线备份机制2.RBD块存储的备份导出操作2.1.为RBD块存储设备创建一个快照2.2.基于快照文件备份到本地系统2.3.基于块设备备份到本地系统 3.RBD块存储的备份还原导入操作4.RBD块存储的增量备份与增量还原4.1.增量备份的操作4.2.增量备份的还原操作 1.RBD块…

从零开始学React--环境搭建

React官网 快速入门 – React 中文文档 1.搭建环境 下载nodejs,双击安装 nodejs下载地址 更新npm npm install -g npm 设置npm源,加快下载速度 npm config set registry https://registry.npmmirror.com 创建一个react应用 npx create-react-app react-ba…

Nginx的配置与调试

目录 1、安装Nginx 2、Nginx的配置文件结构 2.1 Nginx的全局配置 2.2 HTTP服务器配置 2.3 HttpGzip模块配置 2.4 负载均衡配置 2.5 server虚拟主机配置 2.6 location URL匹配配置 2.7 StubStatus模块配置 1、安装Nginx 在安装Nginx之前,需确保系统已经安装…

202303青少年软件编程(Python)等级考试试卷(四级)

第 1 题 【单选题】 运行下列程序, 输出的结果是? ( ) def wenhao(name = zhejiang):print(hello + name)wenhao()A :hello B :hellozhejiang C :helloname D :程序将提示运行错误 正确答案:B 试题解析: 定义函数时, 可以指定形参的默认值。 如果在调用函数时给函数…

SpringBoot如何使用日志Logback,及日志等级详解

Spring Boot默认已经集成了SLF4J(Simple Logging Facade for Java)作为日志的接口,以及Logback作为日志的实现。这意味着在大多数情况下,你无需做额外的配置即可开始记录日志。 下面是一个简要的指南,包括如何在Spring…