Hi,
I'm experimenting with bubbletea for creating a TUI and I came across the
following problem:
I have a generic struct declared:
type ResourceUpdateMsg[T any] struct {
value T
}
This is used to create messages, e.g.:
func updateCpuStats() tea.Msg {
cpuStats, _ := cpu.Percent(0, false)
return ResourceUpdateMsg[Cpu]{
Cpu{
Usage: cpuStats[0],
},
}
}
Now, in one update function I'm not interested in the specific type of a
message; each message should be routed to another, more specific update
function:
switch msg := msg.(type) {
case resources.ResourceUpdateMsg[any]:
resourceModel, cmd := m.resources.Update(msg)
m.resources = resourceModel.(resources.Model)
return m, cmd
....
}
In the other, specific update function the switch distinguishes between
different types:
switch msg := msg.(type) {
case ResourceUpdateMsg[Cpu]:
m.Cpu = msg.value
cmd := m.Progress.CpuProgress.SetPercent(m.Cpu.Usage / 100)
return m, tea.Batch(tickCmd(updateCpuStats), cmd)
case ResourceUpdateMsg[Mem]:
m.Mem = msg.value
cmd := m.Progress.MemProgress.SetPercent(m.Mem.Usage / 100)
return m, tea.Batch(tickCmd(updateMemoryStats), cmd)
...
}
But this does not work, the case is never selected in the first update
function. I have to write all cases, but each case basically does the same:
route the message to the other function.
I'm fairly new to Go and my background is Java / Kotlin. In those languages
I would work with inheritance.
Is this possible in Go? To have a "wildcard" type parameter? If not, what
would be an alternative to the above?
--
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 [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/golang-nuts/11bbc330-ef43-427e-97c4-829052fbc9dfn%40googlegroups.com.