package main import ( "context" "fmt" "slices" ) // App struct type App struct { ctx context.Context } // NewApp creates a new App application struct func NewApp() *App { return &App{} } // startup is called when the app starts. The context is saved // so we can call the runtime methods func (a *App) startup(ctx context.Context) { a.ctx = ctx } // Greet returns a greeting for the given name func (a *App) Greet(name string) string { return fmt.Sprintf("Hello %s, It's show time!", name) } type Thing struct { ID int Name string } type Service struct { things map[int]Thing maxID int } func NewThingsService() *Service { return &Service{ things: make(map[int]Thing), } } func (s *Service) NewThing(name string) { s.maxID++ s.things[s.maxID] = Thing{ Name: name, ID: s.maxID, } print(name) } func (s *Service) GetThings() []Thing { things := make([]Thing, 0, len(s.things)) for _, t := range s.things { things = append(things, t) } slices.SortFunc(things, func(a, b Thing) int { return a.ID - b.ID }) return things } func (s *Service) DeleteThing(id int) { delete(s.things, id) }