Hi gophers! In the last post I proposed a way to avoid I/O race on any global variable: https://groups.google.com/g/golang-nuts/c/4AW1Ss9Tjp0
However, the code does not seem tidy, since each type needs to repeat defining the two methods Save and Load, though using this methods is easy. So I did a little play around, but got stuck if I want to add in new methods to specific global types, such as tick to all integer types, or push to all slice types: ------------------------------------------------------------- package main import ( "fmt" "sync" ) type Global struct { mutex sync.Mutex value any } func (g *Global) Save(v any) { g.mutex.Lock() g.value = v g.mutex.Unlock() } func (g *Global) Load() any { g.mutex.Lock() defer g.mutex.Unlock() return g.value } var S = &Global{} func main() { S.Save(5) fmt.Printf("S=%v, S.mutex=%v, S.value=%d \n", S, S.mutex, S.value) fmt.Printf("S=%v, S type as %[1]T", S.Load()) } //New global types that has methods beyond Save and Load: /* type countable interface { ~int | ~int8 | ~int16 | ~int32 | ~int64 } type Counter struct { mutex sync.Mutex value countable } func (c *Counter) Tick() { c.mutex.Lock() c.value += 1 c.mutex.Unlock() } */ ===================================== It worked well with the "Global" struct type. However, as I want to narrow the scope of this type down to generate integer types (as in the commented code), it encountered two obstacles: 1) It is not legal to embed a generic inside a struct, nor can it make generalized computation =+1 2) Inheritance is not available in golang, so type "Counter" cannot inherit type "Global" and get its methods automatically. I need to repeat Save and Load methods to "Counter". Am I correct? Or can you improve it? -- 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/baa74bff-6688-4d39-843b-c99a4fea2d1an%40googlegroups.com.