Rumah > pembangunan bahagian belakang > Golang > 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?

王林
Lepaskan: 2024-02-06 11:39:04
ke hadapan
671 orang telah melayarinya

如何修复 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;
}
Salin selepas log masuk

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

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
)
Salin selepas log masuk

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

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!

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