Я пытаюсь использовать перечисления protobuf2 в golang, но не могу понять.
Я создал простой файл protobuf:
syntax = "proto2" ;
package enum ;
message Foo{
enum Bar{
LOL = 1;
}
optional Bar baz = 1;
}
И я создал простой файл golang:
package main
import (
enum "./enum"
"github.com/golang/protobuf/proto"
)
func main() {
msg := &enum.Foo{
Baz: enum.Foo_LOL,
}
proto.Marshal(&msg)
}
Я получил ошибку.
./foo.go:10: cannot use enum.Foo_LOL (type enum.Foo_Bar) as type *enum.Foo_Bar in field value
Казалось, что решение достаточно просто, просто добавьте &
перед enum.Foo_Bar
.
package main
import (
enum "./enum"
"github.com/golang/protobuf/proto"
)
func main() {
msg := &enum.Foo{
Baz: &enum.Foo_LOL,
}
proto.Marshal(&msg)
}
Нет:
./foo.go:10: cannot take the address of enum.Foo_LOL
Я искал в Google и нашел этого парня, которого троллирует бот .У него был какой-то рабочий код, но он был достаточно многословен, чтобы утомлять библейского ученого:
package main
import (
enum "./enum"
"github.com/golang/protobuf/proto"
)
var lolVar = enum.Foo_LOL
func main() {
msg := &enum.Foo{
Baz: &lolVar,
}
proto.Marshal(msg)
}
Я посмотрел в сгенерированном коде и нашел метод Enum
, который также работал, но был достаточно многословен, чтобы утомлятьналоговый аудитор:
package main
import (
enum "./enum"
"github.com/golang/protobuf/proto"
)
func main() {
msg := &enum.Foo{
Baz: enum.Foo_LOL.Enum(),
}
proto.Marshal(msg)
}
Какой метод предназначен?