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

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

WBOY
WBOY轉載
2024-02-11 21:54:08638瀏覽

如何在 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刪除