Maison >développement back-end >Golang >Comment corriger les champs redéfinis dans la définition du tampon de protocole dans Go ?

Comment corriger les champs redéfinis dans la définition du tampon de protocole dans Go ?

王林
王林avant
2024-02-06 11:39:04667parcourir

如何修复 Go 中协议缓冲区定义中重新定义的字段?

Contenu de la question

Je construis un client gRPC à l'aide du fichier .proto du fournisseur et j'ai plusieurs énumérations contenant des valeurs du même nom.

syntax = "proto3";

enum Color {
  NONE = 0;
  BLUE = 1;
}

enum Style {
  SOLID = 0;
  NONE = 1;
}

Ainsi, lorsque je génère le service Go pour le fichier .proto et que j'essaie de l'exécuter, j'obtiens l'erreur suivante :

...\deal.pb.go:460:2: NONE redeclared in this block
...\deal.pb.go:105:2: other declaration of NONE

J'ai essayé de déplacer des énumérations dans des messages, par exemple en déplaçant des couleurs dans des formes, et je m'attendais à ce que cela fournisse un espace de noms différent. Mais ça ne sert à rien. Le code généré déclare des blocs constants et le message ne fournit pas l'espacement des noms que je souhaite. Cela fonctionne pour C#.

const (
  NONE Shape = 0
  BLUE Shape = 1
)

Des idées sur la façon de résoudre ce problème ?


Bonne réponse


Vous devez renommer les valeurs d'énumération car le principal problème dans le code fourni est que le code Go généré contient deux constantes nommées NONE, dont l'une vient de l'énumération Color et la Style Une des énumérations. Cela provoque un conflit de noms car en go, toutes les constantes du code protobuf généré existent au niveau du package, ce qui en fait des variables globales du package. Alors, vous pouvez peut-être essayer ceci :

enum Color {
  COLOR_NONE = 0;
  COLOR_BLUE = 1;
}

enum Style {
  STYLE_SOLID = 0;
  STYLE_NONE = 1;
}

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