You might want to write this a bit different:
You start by locking, which is not the most common way to use a lock: Everything is locked unless you unlock it.
A more common way is:
package mainimport ("fmt""sync")type Box struct { Stuff int mu sync.Mutex}var box Boxfunc init() { box = Box{}}func (box *Box) add() { fmt.Println("add()") box.mu.Lock() box.Stuff++ box.mu.Unlock()}...Scoping your locks to the moment of change and not to the complete app.