Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mempunyai struct pembangunan dan struct pengeluaran di Golang dengan ahli yang sama tetapi tag JSON yang berbeza?

Bagaimana untuk mempunyai struct pembangunan dan struct pengeluaran di Golang dengan ahli yang sama tetapi tag JSON yang berbeza?

WBOY
WBOYke hadapan
2024-02-11 21:54:08694semak imbas

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

php Editor Apple Dalam pembangunan Golang, kami sering menghadapi situasi di mana kami perlu menggunakan ahli yang sama dalam struktur pembangunan dan struktur pengeluaran, tetapi memerlukan tag JSON yang berbeza. Dalam kes ini, kita perlu mencari penyelesaian yang fleksibel supaya kita boleh menukar antara tab yang berbeza dengan mudah semasa menulis kod. Artikel ini akan memperkenalkan cara melaksanakan keperluan ini di Golang untuk menjadikan proses pembangunan lebih cekap dan fleksibel.

Kandungan soalan

Pertama kali bertanya! Saya cuba memisahkan pembangunan dan pengeluaran menggunakan struktur yang sama.

Saya menggunakan airtable yang menghantar rekod sebagai json dengan tag fld yang kami gunakan semasa unmarshalling.

type airtablerecord struct {
    name   *string  `json:"fldaaaa,omitempty"`
}

Saya mempunyai 2 jadual udara berasingan:

  1. Untuk pembangunan
  2. untuk pengeluaran

Ia adalah sama, cuma kerana cara meja udara berfungsi, medan diberi label fld yang berbeza

Gambar tempat meja udara saya

Sekarang untuk memisahkan persekitaran pembangunan daripada persekitaran pengeluaran, saya perlu membatalkan ulasan ahli yang betul berdasarkan jadual udara yang saya tunjuk.

type airtablerecord struct {
    // development
    name   *string  `json:"fldaaaa,omitempty"`

    // production
    //name   *string  `json:"fldbbbb,omitempty"`
}

Saya menyimpan jenis ini dalam fail model.go miliknya sendiri untuk digunakan oleh pakej lain.

Saya menyiasat:

  • Terdapat beberapa tag json dalam satu baris, golang tidak akan melakukan ini
type airtablerecord struct {
    // development or production
    name   *string  `json:"fldaaaa,fldbbbb,omitempty"`
}
  • Memisahkan fail saya menggunakan teg binaan, mungkin ini berfungsi tetapi saya salah melakukannya

Fail 1:

// +build dev
type airtablerecord struct {
    // development
    name   *string  `json:"fldaaaa,omitempty"`
}

Fail 2:

type AirtableRecord struct {
    // Production
    Name   *string  `json:"fldBBBB,omitempty"`
}
  • Telah mengkaji penggunaan pelabelan semula tetapi contoh yang mereka berikan tidak kelihatan seperti yang saya cari
    • Tanda nama semula pautan: https://pkg.go.dev/github.com/sevlyar/[emel dilindungi]

Saya mahu menukar label ahli ini secara dinamik bergantung pada sama ada saya menjalankan mod pembangunan atau mod pengeluaran.

Sebarang dan semua bantuan akan sangat dihargai!

Penyelesaian

Jika anda mendapat redeclared 使用构建标记的 ralat kompilasi dalam blok ini, sila nyatakan tag tidak berteg pada fail prod untuk mengelakkan perkara ini.

Fail pembangunan

// +build dev
type airtablerecord struct {
    // development
    name   *string  `json:"fldaaaa,omitempty"`
}

Dokumen Produk

// +build !dev
type airtablerecord struct {
    // development
    name   *string  `json:"fldaaaa,omitempty"`
}

Bina

# for dev
go build -tags=dev -o devrel
# for prod
go build -tags=prod -o prodrel  
or no tags for prod

Format teg binaan juga telah berubah sejak 1.17, jadi dalam kes anda,

//go:build dev

Tetapi juga harus digunakan dengan yang lebih tua.

Atas ialah kandungan terperinci Bagaimana untuk mempunyai struct pembangunan dan struct pengeluaran di Golang dengan ahli yang sama tetapi tag JSON yang berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam