I'm trying to use protobuf2 enums in golang but I cannot figure it out.
I created a simple protobuf file:
syntax = "proto2" ;
package enum ;
message Foo{
enum Bar{
LOL = 1;
}
optional Bar baz = 1;
}
And I created a simple golang file:
package main
import (
enum "./enum"
"github.com/golang/protobuf/proto"
)
func main() {
msg := &enum.Foo{
Baz: enum.Foo_LOL,
}
proto.Marshal(&msg)
}
I got an error.
./foo.go:10: cannot use enum.Foo_LOL (type enum.Foo_Bar) as type *enum.Foo_Bar in field value
It seemed simple enough to solve, just add a &
in front of 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)
}
Nope:
./foo.go:10: cannot take the address of enum.Foo_LOL
I searched google and found this guy being trolled by a bot. He had some working code, but it was verbose enough to bore a bible scholar:
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)
}
I looked in the generated code and found an Enum
method, which also worked, but was verbose enough to bore a tax auditor:
package main
import (
enum "./enum"
"github.com/golang/protobuf/proto"
)
func main() {
msg := &enum.Foo{
Baz: enum.Foo_LOL.Enum(),
}
proto.Marshal(msg)
}
What is the intended method?