当前位置: 首页 > 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了。

相关文章:

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

在使用go来开发跨平台应用的时候,比如配置文件的路径,我们希望设置一个默认值,windows下的路径是类似 d:\myapp\app.conf 这样的, unix系统中的路径是 /opt/myapp/app.conf 这样的, 而我们在使用的时候需要使用的是同…...

校园周边美食探索及分享平台,基于 SpringBoot+Vue+MySQL 开发的前后端分离的校园周边美食探索及分享平台设计实现

目录 一. 前言 二. 功能模块 2.1. 前台首页功能模块 2.2. 用户功能模块 2.3. 管理员功能模块 三. 部分代码实现 四. 源码下载 一. 前言 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起&#xff0…...

Discourse 编辑没有办法显示更多的 JS 错误

Priority/Severity: High Platform: 3.3.0.beta3-dev UI bugs Description: 昨天升级的时到最新版本的时候就发现有这个错误,是 JS 的错误。 发了一个帖子到官方的网站上,官方说可能是插件的问题。 但是我们实在是没有安装什么插件呀? 官方…...

CSS实现一个雨滴滑落效果

使用纯CSS来实现一个真实的雨滴滑落效果可能会有些挑战,因为CSS主要关注于静态样式和简单的动画效果。然而,你可以使用CSS动画和keyframes来模拟一个雨滴滑落的简化效果。 以下是一个基本的示例,展示如何使用CSS来模拟雨滴从顶部滑落到底部的…...

vue2+echarts地图下钻+地图遮盖物散点

一、下载工具 npm i echarts echarts-gl axios -S -S是生产依赖默认是-S不写也可以 -D是开发依赖 二、引入工具 import * as echarts from "echarts"; import "echarts-gl"; import axios from "axios"; 三、HTML部分代码 <div class&…...

关于C++的特殊类定制

特殊类定制 在C中&#xff0c;一些特殊性质的类如何设计 类禁止拷贝的对象 C11 使用delete关键字赋值给拷贝构造和赋值C98将拷贝构造和赋值声明在私有里 类只能在堆上创建的对象 将构造函数私有化, 提供一个获取对象堆上创建对象的公有函数将析构函数私有化, 提供一个释放…...

Linux备份脚本

作用 Linux文件备份的作用较多&#xff0c;推荐以下几种&#xff1a; 保护文件&#xff1a;备份可以帮助用户保护文件&#xff0c;防止文件被意外删除或损坏。保证系统安全和应用安全&#xff1a;Linux系统管理人员对系统和业务应用要有一个合理的备份恢复策略&#xff0c;完…...

【Unity】实现轮盘抽奖

简介 示例一&#xff1a;使用协程完成轮盘转动 using System; using System.Collections; using System.Collections.Generic; using UnityEngine;public class Lunpan : MonoBehaviour {[Tooltip("轮盘节点")]public Transform Roulette;[Tooltip("轮盘旋转的…...

面下对象之overload与override

简介 在面向对象编程中,重载(overloading)和重写(overriding)是两个不同的概念。 重载(Overloading)的定义 重载是同一个类中定义多个同名方法,但是这些方法具有不同的参数列表(参数个数、参数类型或参数顺序不同)。 当调用这个方法时,编译器会根据实际传入的参数自动选择对…...

大数据之Hive函数大全

&#x1f527; Hive函数大全 更多大数据学习资料请关注公众号“大数据领航员"免费领取 一、数学函数 1、取整函数: round 1.函数描述 返回值语法结构功能描述doubleround(double a)返回double类型的整数值部分&#xff08;遵循四舍五入&#xff09; 2.例程 hive>…...

宝塔下应该用 Memcached 还是 Redis?

明月最近在跟几个使用宝塔面板的客户运维的时候发现不少站长不知道如何选择 Memcached 和 Redis&#xff0c;甚至都说不清楚 Memcached 或者 Redis 具体是用来干啥的&#xff1f;甚至还碰到过一个站长 Memcached 和 Redis 都安装了&#xff0c;但一个都没有用&#xff0c;就那么…...

恢复视频3个攻略:从不同情况下的恢复方法到实践!

随着科技的进步&#xff0c;我们的生活被各种各样的数字内容所包围&#xff0c;其中&#xff0c;视频因其独特的记录性质&#xff0c;承载着许多重要的资料。但不管是自媒体人还是普通人日常生活随手一拍&#xff0c;都会遇到误删视频的情况。为了帮助您找回手机视频&#xff0…...

从git上拉取项目进行操作

1.Git的概念 Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速的处理从很小到非常大的项目版本管理。它实现多人协作的机制是利用clone命令将项目从远程库拉取到本地库&#xff0c;做完相应的操作后再利用push命令从本地库将项目提交至远程库。 2.Git的工作流程…...

ES升级--01--环境准备和安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Linux 单机1.官网下载 Elasticsearchhttps://www.elastic.co/cn/downloads/past-releases/#elasticsearch 2.解压软件3.创建用户设置用户 es 密码 es赋权ES用户数据…...

Linux 防火墙 firewalld 常用命令

1 防火墙 - firewalld 1.1 开启防火墙 # 临时性开启&#xff0c;服务器重启后会恢复为原来的状态 systemctl start firewalld # 永久性开启&#xff08;即开机启动&#xff09;&#xff0c;重启服务器后生效 systemctl enable firewalld1.2 关闭防火墙 # 临时性关闭&#xf…...

时间|基于SprinBoot+vue的时间管理系统(源码+数据库+文档)

时间管理系统 目录 基于SprinBootvue的时间管理系统 一、前言 二、系统设计 三、系统功能设计 1管理员功能模块 2用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农…...

C++青少年简明教程:for循环语句

C青少年简明教程&#xff1a;for循环语句 C的for循环语句是一种迭代控制语句&#xff0c;用于重复执行一段代码。 语法格式&#xff1a; for(表达式1&#xff1b;表达式2&#xff1b;表达式3) 循环体 for循环语句执行流程图&#xff1a; 不太好理解&#xff0c;请看下图&am…...

自动驾驶技术现状与需求分析

随着科技的不断进步和智能化浪潮的席卷&#xff0c;自动驾驶技术已成为当今交通领域的热点话题。本文旨在深入探讨自动驾驶技术的当前发展状况&#xff0c;并对其未来的市场需求进行细致分析。首先&#xff0c;我们将回顾自动驾驶技术的起源、发展历程以及当前的技术水平&#…...

SQL生成自然数,日历序列 浅析

01.sqlserver版本 使用sqlserver将数据复制n条 selectt.indx,t.name,tmp.vlue from (values(1,苹果) ) as t(indx, name) ,(select[number] as vluefrom master.dbo.spt_valueswhere [type] pand [number] between 1 and 10 ) as tmpspt_values是什么 spt_values是SQL Se…...

【数据结构(邓俊辉)学习笔记】二叉树04——Huffman树

文章目录 0. 概述1. 无前缀冲突编码2. 编码成本3. 带权编码成本4. 编码算法5. 算法实现流程6. 时间复杂度与改进方案 0. 概述 学习Huffman树。 1. 无前缀冲突编码 在加载到信道上之前&#xff0c;信息被转换为二进制形式的过程称作编码&#xff08;encoding&#xff09;&…...

手把手教你用ZPL指令在Zebra打印机上打印动态条码(附完整代码示例)

手把手教你用ZPL指令在Zebra打印机上打印动态条码&#xff08;附完整代码示例&#xff09; 在物流仓储、零售结算和智能制造场景中&#xff0c;自动生成并打印条码标签是提升作业效率的关键环节。Zebra打印机凭借其工业级稳定性和ZPL语言的高效指令集&#xff0c;成为行业标配…...

Canvas Quest商业人像生成应用:电商模特图低成本自动化生产方案

Canvas Quest商业人像生成应用&#xff1a;电商模特图低成本自动化生产方案 1. 电商模特图的痛点与机遇 电商行业有个公开的秘密&#xff1a;商品展示图的拍摄成本往往比商品本身还高。特别是服装、配饰和美妆类目&#xff0c;每季新品需要拍摄上百套模特图&#xff0c;传统方…...

突破网盘下载限制:直链解析工具的技术实现与应用指南

突破网盘下载限制&#xff1a;直链解析工具的技术实现与应用指南 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改&#xff08;改自6.1.4版本&#xff09; &#xff0c;自用&#xff0c;去推广&#…...

终极内存故障排查方案:Memtest86+完整应用指南

终极内存故障排查方案&#xff1a;Memtest86完整应用指南 【免费下载链接】memtest86plus memtest86plus: 一个独立的内存测试工具&#xff0c;用于x86和x86-64架构的计算机&#xff0c;提供比BIOS内存测试更全面的检查。 项目地址: https://gitcode.com/gh_mirrors/me/memte…...

4大价值点:旧设备复活开源工具如何让经典iOS设备重获新生?

4大价值点&#xff1a;旧设备复活开源工具如何让经典iOS设备重获新生&#xff1f; 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to downgrade/restore, save SHSH blobs, and jailbreak legacy iOS devices 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-…...

Ai人工智能知识补充

文章目录 1.5 数据与算法基础:智能系统的“燃料”与“引擎” 1.5.1 数据工程:从原始数据到模型“燃料”的全链路 1.5.2 算法模型构建:从问题定义到模型部署的“炼金术” 1.5.3 数据隐私与安全:在价值挖掘与权利保护间走钢丝 1.6 面临的主要挑战:通往真正智能之路的险阻 1.…...

C++实战:用代码构建你的斗罗大陆武魂觉醒系统

1. 从零开始搭建武魂觉醒系统 第一次看到斗罗大陆的武魂觉醒桥段时&#xff0c;我就被这个充满想象力的设定吸引了。作为程序员&#xff0c;我总忍不住思考&#xff1a;如果用代码实现这个系统会怎样&#xff1f;去年带新人培训时&#xff0c;我尝试用C还原了这个过程&#xff…...

Audio Pixel Studio语音合成实战:正则表达式预处理文本标点停顿

Audio Pixel Studio语音合成实战&#xff1a;正则表达式预处理文本标点停顿 1. 引言&#xff1a;为什么需要文本预处理 在语音合成应用中&#xff0c;文本预处理是一个经常被忽视但至关重要的环节。Audio Pixel Studio作为一款轻量级音频处理工具&#xff0c;虽然内置了强大的…...

从16QAM到256QAM:用Simulink星座图揭秘高阶调制的抗噪性能

高阶QAM调制的星座图分析与Simulink实战指南 在5G和Wi-Fi 6时代&#xff0c;256QAM已成为提升频谱效率的关键技术。但当我们从实验室的理想环境走向真实无线场景时&#xff0c;工程师们常面临一个核心矛盾&#xff1a;如何在频谱效率与系统稳定性之间找到最佳平衡点&#xff1…...

OpenClaw跨平台脚本:Qwen3-32B生成的Python代码自动测试

OpenClaw跨平台脚本&#xff1a;Qwen3-32B生成的Python代码自动测试 1. 为什么需要AI全流程编程辅助 作为经常需要写脚本处理数据的开发者&#xff0c;我发现自己陷入了一个典型困境&#xff1a;每天要花大量时间编写重复性代码&#xff0c;而真正需要创造性思考的部分反而被…...