Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membetulkan medan yang ditakrifkan semula dalam definisi penimbal protokol dalam Go?

Bagaimana untuk membetulkan medan yang ditakrifkan semula dalam definisi penimbal protokol dalam Go?

王林
王林ke hadapan
2024-02-06 11:39:04612semak imbas

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

Kandungan soalan

Saya sedang membina klien gRPC menggunakan fail .proto pembekal dan mempunyai beberapa enum yang mengandungi nilai dengan nama yang sama.

syntax = "proto3";

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

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

Jadi apabila saya menjana perkhidmatan Go untuk fail .proto dan cuba menjalankannya, saya mendapat ralat berikut:

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

Saya cuba mengalihkan enum dalam mesej, contohnya memindahkan warna dalam bentuk, dan menjangkakan ini akan memberikan ruang nama yang berbeza. Tapi tak guna. Kod yang dihasilkan mengisytiharkan blok malar dan mesej tidak memberikan jarak nama yang saya inginkan. Ini berfungsi untuk C#.

const (
  NONE Shape = 0
  BLUE Shape = 1
)

Ada idea bagaimana untuk menyelesaikan masalah ini?


Jawapan betul


Anda harus menamakan semula nilai penghitungan kerana masalah utama dalam kod yang disediakan ialah kod Go yang dijana mengandungi dua pemalar bernama NONE, salah satunya berasal dari enum Color dan Gaya Salah satu pengiraan. Ini menyebabkan konflik penamaan kerana semasa, semua pemalar dalam kod protobuf yang dijana wujud pada peringkat pakej, menjadikannya pembolehubah global pakej. Jadi, mungkin anda boleh mencuba ini:

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

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

Atas ialah kandungan terperinci Bagaimana untuk membetulkan medan yang ditakrifkan semula dalam definisi penimbal protokol dalam Go?. 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