github.com/egonelbre/exp@v0.0.0-20240430123955-ed1d3aa93911/fields/00_typeswitch/field.go (about) 1 package main 2 3 //gistsnip:start:interface 4 type Field interface { 5 Name() string 6 } 7 8 type Uint struct { 9 ID string 10 Value uint64 11 } 12 13 func (a *Uint) Name() string { return a.ID } 14 func (a *Uint) Add(b *Uint) *Uint { return &Uint{Value: a.Value + b.Value} } 15 func (a *Uint) Sub(b *Uint) *Uint { return &Uint{Value: a.Value - b.Value} } 16 17 type Float struct { 18 ID string 19 Value float64 20 } 21 22 func (a *Float) Name() string { return a.ID } 23 func (a *Float) Add(b *Float) *Float { return &Float{Value: a.Value + b.Value} } 24 func (a *Float) Sub(b *Float) *Float { return &Float{Value: a.Value - b.Value} } 25 26 //gistsnip:end:interface 27 28 type Error struct{ Desc string } 29 30 func (a *Error) Name() string { return "Error" } 31 func (a *Error) Error() string { return a.Desc }