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.pswp.cn/bicheng/18762.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18762.shtml
英文地址,請注明出處:http://en.pswp.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…