библиотеки протоколов golang имеют вспомогательную утилиту для этой цели:
// MessageType returns the message type (pointer to struct) for a named message.
// The type is not guaranteed to implement proto.Message if the name refers to a
// map entry.
func MessageType(name string) reflect.Type {
// ....
}
, чтобы использовать ее, вы можете использовать метод, подобный следующему:
func getProto(messageType string, messageBytes []byte) proto.Message {
pbtype := proto.MessageType(messageType)
msg := reflect.New(pbtype.Elem()).Interface().(proto.Message)
proto.Unmarshal(messageBytes, msg)
return msg
}
Я привел полный примерна github: https://github.com/rotemtam/pbreflect-example