summaryrefslogtreecommitdiff
path: root/go/bank-account/bank_account.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-08-27 16:48:26 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-08-27 16:48:26 +0200
commitc00da54ecddabb9e218029466bb35bca040b87fb (patch)
tree9df70dc496fc81b57833025b95380ff59da66f97 /go/bank-account/bank_account.go
parent39d4afd6d12ba6dd043763f1e65dde5fd8b99497 (diff)
Slove bank account
Diffstat (limited to 'go/bank-account/bank_account.go')
-rw-r--r--go/bank-account/bank_account.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/go/bank-account/bank_account.go b/go/bank-account/bank_account.go
new file mode 100644
index 0000000..bfaa894
--- /dev/null
+++ b/go/bank-account/bank_account.go
@@ -0,0 +1,48 @@
+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
+}