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
Lepaskan: 2024-02-11 21:54:08
ke hadapan
698 orang telah melayarinya

如何在 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"`
}
Salin selepas log masuk

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"`
}
Salin selepas log masuk

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"`
}
Salin selepas log masuk
  • 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"`
}
Salin selepas log masuk
Salin selepas log masuk

Fail 2:

type AirtableRecord struct {
    // Production
    Name   *string  `json:"fldBBBB,omitempty"`
}
Salin selepas log masuk
  • 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"`
}
Salin selepas log masuk
Salin selepas log masuk

Dokumen Produk

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

Bina

# for dev
go build -tags=dev -o devrel
# for prod
go build -tags=prod -o prodrel  
or no tags for prod
Salin selepas log masuk

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

//go:build dev
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan