Можно сделать поле `kind`.
syntax = "proto3";
package entity;
message Entity {
// Kinds:
//
// * kaboom
// * oops
string kind = 1;
message Kaboom { uint64 data = 1; }
message Oops { uint64 data = 1; }
Kaboom kaboom = 2;
Oops oops = 3;
}
package main
import (
"github.com/golang/protobuf/proto"
"pathtopkg/entity"
)
func main() {
var e entity.Entity
err := proto.Unmarshal(buf, &e)
if err != nil {
panic(err)
}
switch e.Kind {
case "kaboom":
// Kaboom
case "oops":
// Oops
default:
panic("Invalid kind")
}
}