Go语言的函数07---闭包练习(ATM存取款)

Posted xiaoqiang1_1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言的函数07---闭包练习(ATM存取款)相关的知识,希望对你有一定的参考价值。

package main

import "fmt"

/*
@ATM(闭包练习)
·写一个Atm(函数),返回存款,取款两个内层函数
·存款,取款两个函数,都以一个金额为参数,返回存取之后的余额
·将各自的余额存在函数闭包中
·比尔,马云,你任意存取之后,输出各自余额
*/

func Atm(name string) (func(amount int) (ballance int), func(amount int) (ballance int)) {
	/*
	内存函数的账户姓名
	内存函数的账户余额
	*/
	var accountName string
	var accountBallance int
	accountName = name

	/*欢迎语*/
	fmt.Println("欢迎你", accountName)

	/*定义存款函数*/
	saveFunc := func(amount int) (ballance int) {
		accountBallance += amount
		return accountBallance
	}

	/*定义取款函数*/
	drawFunc := func(amount int) (ballance int) {
		accountBallance -= amount
		return accountBallance
	}

	/*返回存取款函数*/
	return saveFunc, drawFunc
}

func main() {

	/*调用闭包函数得到各自的存取款函数副本*/
	billSave, billDraw := Atm("Bill")
	jackSave, jackDraw := Atm("Jack")
	diorsSave, diorsDraw := Atm("Diors")

	/*各自存款*/
	billBallance := billSave(1000000)
	jackBallance := jackSave(500000)
	diorsBallance := diorsSave(999)

	/*各自取款*/
	diorsBallance = diorsDraw(500)
	billBallance = billDraw(300000)
	diorsBallance = diorsDraw(300)
	jackBallance = jackDraw(400000)
	diorsBallance = diorsDraw(100)

	/*打印余额*/
	fmt.Println(billBallance,jackBallance,diorsBallance)
}

输出:

欢迎你 Bill
欢迎你 Jack
欢迎你 Diors
700000 100000 99

  

以上是关于Go语言的函数07---闭包练习(ATM存取款)的主要内容,如果未能解决你的问题,请参考以下文章

Go语言基础:闭包_defer_recover

语言模拟ATM自动取款机系统

Go 匿名函数与闭包的使用

银行ATM存取款系统(C语言实现)

Go语言闭包

Go语言开发Go语言闭包