package account import "sync" type Account struct { balance int64 open bool sync.Mutex } func Open(inital int64) *Account { if inital < 0 { return nil } return &Account{balance: inital, open: true} } func (a *Account) Close() (int64, bool) { a.Lock() defer a.Unlock() if a.open { a.open = false return a.balance, true } return 0, false } func (a *Account) Balance() (int64, bool) { a.Lock() defer a.Unlock() if a.open { return a.balance, true } return 0, false } func (a *Account) Deposit(amount int64) (int64, bool) { a.Lock() defer a.Unlock() if a.open { if a.balance < -amount { return 0, false } a.balance += amount return a.balance, true } return 0, false }