php小編蘋果在Golang開發中,我們經常遇到需要在開發結構和生產結構中使用相同的成員,但卻需要不同的JSON標簽的情況。這種情況下,我們需要找到一種靈活的解決方案,以便在編寫代碼時能夠方便地切換不同的標簽。本文將介紹如何在Golang中實現這一需求,讓開發過程更加高效和靈活。
問題內容
第一次提問!
我正在嘗試將使用相同結構的開發和生產分開。
我正在使用 airtable,它將記錄作為 json 發送,并帶有我們在解組時使用的 fld 標簽。
type airtablerecord struct { name *string `json:"fldaaaa,omitempty"` }
登錄后復制
我有 2 個獨立的 airtable:
-
用于開發
用于生產
它們是相同的,只是由于 airtable 的工作方式,字段被賦予了不同的 fld 標簽
我的 airtable 場地的圖片
現在要將開發環境與生產環境分開,我必須根據我指向的 airtable 取消注釋正確的成員。
type airtablerecord struct { // development name *string `json:"fldaaaa,omitempty"` // production //name *string `json:"fldbbbb,omitempty"` }
登錄后復制
我將此類型保留在它自己的 model.go 文件中,供其他包使用。
我調查過:
一行中有多個 json 標簽,golang 不會這樣做
type airtablerecord struct { // development or production name *string `json:"fldaaaa,fldbbbb,omitempty"` }
登錄后復制
使用構建標簽分隔我的文件,也許這可行,但我做錯了
文件1:
// +build dev type airtablerecord struct { // development name *string `json:"fldaaaa,omitempty"` }
登錄后復制登錄后復制
文件2:
type AirtableRecord struct { // Production Name *string `json:"fldBBBB,omitempty"` }
登錄后復制
研究過使用重新標記,但他們給出的示例看起來不像我正在尋找的
重新標記鏈接:https://pkg.go.dev/github.com/sevlyar/[電子郵件受保護]
我想根據我是在開發模式還是生產模式下運行來動態更改此成員的標簽。
任何及所有幫助將不勝感激!
解決方法
如果您在此塊中收到 redeclared 使用構建標記的
編譯錯誤,請在 prod 文件上指定一個未標記的標記,以避免出現這種情況。
開發文件
// +build dev type airtablerecord struct { // development name *string `json:"fldaaaa,omitempty"` }
登錄后復制登錄后復制
產品文件
// +build !dev type airtablerecord struct { // development name *string `json:"fldaaaa,omitempty"` }
登錄后復制
構建
# for dev go build -tags=dev -o devrel # for prod go build -tags=prod -o prodrel or no tags for prod
登錄后復制
自 1.17 以來,構建標簽格式也發生了變化,所以在您的情況下,它會是,
//go:build dev
登錄后復制
但也應該與舊的一起使用。