package main

import "fmt"
/*
李逵和武松的Study方法的逻辑是几乎一模一样的
然而为了分别保存两人的学习进度,需要开辟两个全局变量,函数内部的需要使用两条分支结构才能完成业务逻辑
如果是108将都来学习。。。
此时代码的可复用性很差
*/
var progress int
func Study(name string, hours int) ( int) {
fmt.Printf("%s学习了%d小时",name,hours)
progress += hours
return hours
}
func main081() {
progress := Study("黑旋风",5)
fmt.Printf("李逵的学习进度%d/10000",progress)
} /*
使用闭包函数优化Study
每个人有不同的学习进度,将这个进度保存在【各自的闭包】中
*/
/*
闭包函数:返回函数的函数
闭包函数的好处:使用同一份内层函数的代码,创建出任意多个不同的函数对象,这些对象各自的状态都被保存在函数闭包(外层函数)中,各行其道,互不干扰
*/ func GetStudy(name string) func(int) int{
var progress int
study := func(hours int) int {
fmt.Printf("%s学习了%d小时\n", name ,hours)
progress += hours
return progress
}
return study
} func main() {
studyFunc := GetStudy("李逵")
studyFunc(3)
studyFunc(5)
likuiProgress := studyFunc(2)
fmt.Printf("李逵的学习进度%d/10000\n",likuiProgress)
studyFunc1 := GetStudy("宋江")
studyFunc1(9)
studyFunc1(8)
songjiangProgress1 := studyFunc1(5)
fmt.Printf("宋江的学习进度%d/10000\n",songjiangProgress1)
}

输出:

李逵学习了3小时
李逵学习了5小时
李逵学习了2小时
李逵的学习进度10/10000
宋江学习了9小时
宋江学习了8小时
宋江学习了5小时
宋江的学习进度22/10000

  

最新文章

  1. 纯WebApi,不包含MVC Demo
  2. Mysql 中文乱码(Navicat for MySQL)
  3. java 运算符使表达式结果类型自动提升
  4. mysql5.7忘记密码
  5. 163源报错Hash Sum mismatch 解决方法
  6. HDU1297 Children’s Queue (高精度+递推)
  7. java中String类型转换方法
  8. Thread+Handler 线程 消息循环(转载)
  9. 萌货猫头鹰登录界面动画iOS实现分析
  10. TColorPickerButton组件
  11. C#中的枚举类型
  12. Arduino Micro USB库
  13. hdoj 2896 病毒侵袭(AC自动机)
  14. C/C++的静态库与动态库
  15. vue-devtools(vue 2.0)手动安装与使用 ? 如何处理Vue.js is detected on this page ?
  16. LMAX高并发系统架构
  17. 2018上C语言程序设计(初级)作业- 第2次作业
  18. php中include和require的区别(整理)
  19. Channels实现扫码登录
  20. 如何用命令将本地项目上传到git[z]

热门文章

  1. sklearn.metrics【指标】
  2. 聊一聊Jmeter的参数化
  3. CS与MSF之间的会话传递
  4. junit+maven单元测试
  5. golang channel的行为
  6. 《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
  7. Python脚本写端口扫描器(socket,python-nmap)
  8. thymeleaf-extras-springsecurity在Spring或SpringBoot中html页面命名空间
  9. layui中的多图上传
  10. CCNA 第四章 轻松划分子网