Maison  >  Article  >  développement back-end  >  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
WBOYavant
2024-02-11 21:54:08638parcourir

如何在 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"`
}

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"`
}

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"`
}
  • 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"`
}

Fichier 2 :

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

Documents produits

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

Construire

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

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

//go:build dev

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer