Golang:如何实现传输方法/功能
我拥有以下域。我们如何实现可以将Golang:如何实现传输方法/功能,go,Go,我拥有以下域。我们如何实现可以将金额从一个帐户转移到另一个帐户的转账功能。我应该能够从储蓄转为支票,反之亦然。我的OOP世界,一个超级类型使它更容易。我想知道我们如何在围棋中做到这一点 type AccountData struct { Num string Name string OpenDate time.Time Balance float64 } type SavingsAccount struct { InterestRat
金额
从一个帐户转移到另一个帐户的转账
功能。我应该能够从储蓄转为支票,反之亦然。我的OOP世界,一个超级类型使它更容易。我想知道我们如何在围棋中做到这一点
type AccountData struct {
Num string
Name string
OpenDate time.Time
Balance float64
}
type SavingsAccount struct {
InterestRate float32
AccountData
}
type CheckingAccount struct {
TransactionFee float32
AccountData
}
type Account interface {
Deposit(amount float64) error
Withdraw(amount float64) error
}
//constructor functions
func OpenSavingsAccount(no string, name string, openingDate time.Time) SavingsAccount {
return SavingsAccount{
AccountData: AccountData{Num: no,
Name: name,
OpenDate: openingDate,
},
InterestRate: 0.9,
}
}
func OpenCheckingAccount(no string, name string, openingDate time.Time) CheckingAccount {
return CheckingAccount{
AccountData: AccountData{Num: no,
Name: name,
OpenDate: openingDate,
},
TransactionFee: 0.15,
}
}
//Account methods
func (acct *SavingsAccount) Withdraw(amount float64) error {
if acct.Balance < amount {
return errors.New("Not enough money to withdraw")
}
acct.Balance = acct.Balance - amount
return nil
}
func (acct *SavingsAccount) Deposit(amount float64) error {
fmt.Printf("Depositing %f \n", amount)
acct.Balance = acct.Balance + amount
return nil
}
func (acct *CheckingAccount) Deposit(amount float64) error {
fmt.Printf("Depositing %f \n", amount)
acct.Balance = acct.Balance + amount
return nil
}
func (acct *CheckingAccount) Withdraw(amount float64) error {
if acct.Balance < amount {
return errors.New("Not enough money to withdraw")
}
acct.Balance = acct.Balance - amount
return nil
}
类型AccountData结构{
Num字符串
名称字符串
开放日期时间
余额浮动64
}
类型SavingsAccount结构{
利率浮动32
会计数据
}
类型CheckingAccount结构{
交易费浮动32
会计数据
}
类型帐户接口{
存款(金额浮动64)错误
取款(金额浮动64)错误
}
//构造函数
func OpenSavingsAccount(无字符串、名称字符串、openingDate time.time)SavingsAccount{
返回储蓄帐户{
AccountData:AccountData{Num:no,
姓名:姓名,,
OpenDate:openingDate,
},
利率:0.9,
}
}
func OpenCheckingAccount(无字符串、名称字符串、openingDate time.time)CheckingAccount{
返回检查帐户{
AccountData:AccountData{Num:no,
姓名:姓名,,
OpenDate:openingDate,
},
交易费用:0.15,
}
}
//记帐方法
func(账户*储蓄账户)支取(金额浮动64)错误{
如果账户余额<金额{
返回错误。新建(“没有足够的钱取款”)
}
账户余额=账户余额-金额
归零
}
func(账户*储蓄账户)存款(金额浮动64)错误{
格式打印(“存款%f\n”,金额)
账户余额=账户余额+金额
归零
}
func(账户*检查账户)存款(金额浮动64)错误{
格式打印(“存款%f\n”,金额)
账户余额=账户余额+金额
归零
}
func(科目*检查科目)支取(金额浮动64)错误{
如果账户余额<金额{
返回错误。新建(“没有足够的钱取款”)
}
账户余额=账户余额-金额
归零
}
作为练习,设计一个用于处理事务的接口可能是值得的。因此它应该是一个函数。我试图将其实现为一种方法,即转账是帐户接口类型的一部分。@AravindR.Yarram:将指针传递到您的结构:谢谢。为什么指针工作而常规引用不工作?我无法理解原因。@AravindR.Yarram:因为
传输接口方法是在SavingsAccount
((acct*SavingsAccount)
)和CheckingAccount
((acct*CheckingAccount)
)的指针上定义的,而不是它们的值((acct>(acct SavingsAccount)
,(账户检查账户)
)。
func Transfer(to, from Account, amount float64) error {
if err := from.Withdraw(amount); err != nil {
return err
}
if err := to.Deposit(amount); err != nil {
if err := from.Deposit(amount); err != nil {
// `from` should be alerted that their money
// just vanished into thin air
}
return err
}
return nil
}