Hi Bèrto,

as you said, you cannot put a type directly into a map. However you can use package reflect to get type reflection information, that you can put into a map.

But in this case I would simple use a map of constructor functions that have a common interface.

Like this https://go.dev/play/p/j3lb5pbpafT

You still need to assert a type to get to the concrete result type.
Or maybe you can come up with a sufficiant interface.

Have fun

On 4/11/23 23:11, Bèrto ëd Sèra wrote:
Good evening,

I do know there's no way to use
var rule = map[uint8]interface{
     0: thisType,
     1: thatType,
     4: someOtherType,
     .....
}

type Message interface {
....
Become(data []byte)
....
}

type thisType struct {
data []byte
}
func (my *thisType) Become(data []byte) { ....}
type thatType struct {
data []byte
}
func (my *thatType) Become(data []byte) { ....}

WHAT I'M TRYING TO DO IS: I receive a data packet via UDP, it has an Id byte, a payload and ends with a crc32.
|id|....payload....|crc32

Upon reception I need to encapsulate the payload into a struct, and choose the right type of struct depending on the value of the ID byte. Different kinds of payloads get managed by different types of structs, the interface ensure all needed structs implement a common API.

I wonder if there's a way to do what I'm trying to do without using a switch. Anything as declarative as a map would make things a lot easier for anyone who isn't familiar with the code.  However, I see no way to use a map for this.

Thanks in advance
Berto

--
You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com <mailto:golang-nuts+unsubscr...@googlegroups.com>. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/0633636c-a1b6-40e7-9d3e-a49e352727ecn%40googlegroups.com <https://groups.google.com/d/msgid/golang-nuts/0633636c-a1b6-40e7-9d3e-a49e352727ecn%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/0ef9fa7b-e71a-7487-321c-857ea4131097%40mb0.org.

Reply via email to