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?
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!