首頁 > 後端開發 > Golang > 如何在 Golang 中擁有具有相同成員但不同 JSON 標籤的開發結構和生產結構?

如何在 Golang 中擁有具有相同成員但不同 JSON 標籤的開發結構和生產結構?

WBOY
發布: 2024-02-11 21:54:08
轉載
709 人瀏覽過

如何在 Golang 中拥有具有相同成员但不同 JSON 标签的开发结构和生产结构?

php小編蘋果在Golang開發中,我們經常遇到需要在開發結構和生產結構中使用相同的成員,但卻需要不同的JSON標籤的情況。在這種情況下,我們需要找到一種靈活的解決方案,以便在編寫程式碼時能夠輕鬆切換不同的標籤。本文將介紹如何在Golang中實現這項需求,讓開發過程更有效率、更有彈性。

問題內容

第一次問問題! 我正在嘗試將使用相同結構的開發和生產分開。

我正在使用 airtable,它將記錄作為 json 發送,並帶有我們在解組時使用的 fld 標籤。

type airtablerecord struct {
    name   *string  `json:"fldaaaa,omitempty"`
}
登入後複製

我有 2 個獨立的 airtable:

  1. 用於開發
  2. 用於生產

它們是相同的,只是因為 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
登入後複製

但也應該與舊的一起使用。

以上是如何在 Golang 中擁有具有相同成員但不同 JSON 標籤的開發結構和生產結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板