Maison > développement back-end > Golang > Comment avoir une structure de développement et une structure de production dans Golang avec les mêmes membres mais des balises JSON différentes ?

Comment avoir une structure de développement et une structure de production dans Golang avec les mêmes membres mais des balises JSON différentes ?

WBOY
Libérer: 2024-02-11 21:54:08
avant
700 Les gens l'ont consulté

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

php Editor Apple Dans le développement Golang, nous rencontrons souvent des situations où nous devons utiliser les mêmes membres dans la structure de développement et la structure de production, mais avons besoin de balises JSON différentes. Dans ce cas, nous devons trouver une solution flexible afin de pouvoir basculer facilement entre les différents onglets lors de l'écriture du code. Cet article expliquera comment implémenter cette exigence dans Golang pour rendre le processus de développement plus efficace et flexible.

Contenu de la question

Première fois posée ! J'essaie de séparer le développement et la production en utilisant la même structure.

J'utilise airtable qui envoie les enregistrements au format json avec la balise fld que nous utilisons lors du démarchage.

type airtablerecord struct {
    name   *string  `json:"fldaaaa,omitempty"`
}
Copier après la connexion

J'ai 2 airtables distinctes :

  1. Pour le développement
  2. pour la production

Ce sont les mêmes, c'est juste qu'en raison du fonctionnement d'airtable, les champs reçoivent des étiquettes fld différentes

Photos de ma salle airtable

Maintenant, pour séparer l'environnement de développement de l'environnement de production, je dois décommenter les membres corrects en fonction de la table air vers laquelle je pointe.

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

    // production
    //name   *string  `json:"fldbbbb,omitempty"`
}
Copier après la connexion

Je conserve ce type dans son propre fichier model.go pour l'utiliser par d'autres packages.

J'ai enquêté :

  • Il y a plusieurs balises json sur une seule ligne, Golang ne fera pas ça
type airtablerecord struct {
    // development or production
    name   *string  `json:"fldaaaa,fldbbbb,omitempty"`
}
Copier après la connexion
  • Séparer mes fichiers à l'aide de balises de build, peut-être que cela fonctionne mais je me trompe

Fichier 1 :

// +build dev
type airtablerecord struct {
    // development
    name   *string  `json:"fldaaaa,omitempty"`
}
Copier après la connexion
Copier après la connexion

Fichier 2 :

type AirtableRecord struct {
    // Production
    Name   *string  `json:"fldBBBB,omitempty"`
}
Copier après la connexion
  • J'ai envisagé d'utiliser le réétiquetage, mais l'exemple qu'ils ont donné ne ressemble pas à ce que je recherche
    • Lien Retag : https://pkg.go.dev/github.com/sevlyar/[email protected]

Je souhaite changer dynamiquement le label de ce membre selon que je fonctionne en mode développement ou en mode production.

Toute aide serait grandement appréciée !

Solution de contournement

Si vous obtenez une redeclared 使用构建标记的 erreur de compilation dans ce bloc, veuillez spécifier une balise non balisée sur le fichier prod pour éviter cela.

Fichiers de développement

// +build dev
type airtablerecord struct {
    // development
    name   *string  `json:"fldaaaa,omitempty"`
}
Copier après la connexion
Copier après la connexion

Documents produits

// +build !dev
type airtablerecord struct {
    // development
    name   *string  `json:"fldaaaa,omitempty"`
}
Copier après la connexion

Construire

# for dev
go build -tags=dev -o devrel
# for prod
go build -tags=prod -o prodrel  
or no tags for prod
Copier après la connexion

Le format des balises de build a également changé depuis la 1.17, donc dans votre cas, ce serait le cas,

//go:build dev
Copier après la connexion

Mais doit également être utilisé avec les plus âgés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal