闭包案例

package main
import (
"fmt"
"strings" //记住一定引入strings包
) //①编写一个函数makeSuffix,可以接收一个文件后缀名(比如.jpg),并返回一个闭包
//②调用闭包,可以传入一个文件名,如果该文件名没有指定的后缀(如.jpg),则返回.jpg,如果有则全称
//③要求使用闭包方式
//④strings.HasSuffix该函数可以来判断某个字符串是否有指定后缀 func makeSuffix (suffix string) func (string) string {
return func (name string) string {
if !strings.HasSuffix(name, suffix) {
return name + suffix //如果没有后缀就拼接
}
return name
}
}
func main(){ //先返回一个闭包
test := makeSuffix(".jpg") fmt.Println("文件名处理后:", test("go语言圣经"))
fmt.Println("文件名处理后:", test("PHP设计模式.jpg")) }
D:\goproject\src\main>go run hello.go
文件名处理后: go语言圣经.jpg
文件名处理后: PHP设计模式.jpg

 说明

以上代码返回的是一个函数,这个函数引用的是suffix,而suffix是函数外的变量,那么这个函数外的suffix和返回的函数构成闭包。

普通函数

//传递根据哪个后缀判断,其次是文件名字
func makeSuffix (suffix string, name string) string { if !strings.HasSuffix(name, suffix) {
return name + suffix //如果没有后缀就拼接
}
return name }
func main(){ fmt.Println("文件名处理后:", makeSuffix("jpg","go语言圣经"))
fmt.Println("文件名处理后:", makeSuffix("jpg","PHP设计模式.jpg")) }
D:\goproject\src\main>go run hello.go
文件名处理后: go语言圣经jpg
文件名处理后: PHP设计模式.jpg

对比说明

闭包函数只需要传递一次要测试的jpg后缀;用普通函数的话,传递完成后缀会消失,闭包会保存。

Golang闭包案例分析与普通函数对比的更多相关文章

  1. JS冒泡和闭包案例分析

    背景: 今天逛网页发现了百度知道上一个有意思的JS问题,提问者的问题事实上蛮简单的,懂点前端开发技术的应该都能实现.提问者的要求:实现子菜单的弹出,菜单共同拥有三级.每级菜单显示时有500毫秒的延迟. ...

  2. Javascript闭包和C#匿名函数对比分析

    C#中引入匿名函数,多少都是受到Javascript的闭包语法和面向函数编程语言的影响.人们发现,在表达式中直接编写函数代码是一种普遍存在的需求,这种语法将比那种必须在某个特定地方定义函数的方式灵活和 ...

  3. jquery ajax 总是还未等到success回调就刷掉了,就进入了onError函数的错误案例分析

    jquery ajax 总是还未等到success回调就刷掉了,就进入了onError函数的错误案例分析: 同样的请求同时请求了2次,然后第二次的请求把第一次的给刷掉了! (比如:<div on ...

  4. Golang闭包和匿名函数

    1. 匿名函数 匿名函数就是没有函数名的函数,如下所示. func test() int { max := func(a, b int) int { if a > b { return a } ...

  5. 「JavaScript」同步、异步、回调执行顺序之经典闭包setTimeout分析

    聊聊同步.异步和回调 同步,异步,回调,我们傻傻分不清楚, 有一天,你找到公司刚来的程序员小T,跟他说:“我们要加个需求,你放下手里的事情优先支持,我会一直等你做完再离开”.小T微笑着答应了,眼角却滑 ...

  6. 同步、异步、回调执行顺序之经典闭包setTimeout分析

    聊聊同步.异步和回调 同步,异步,回调,我们傻傻分不清楚, 有一天,你找到公司刚来的程序员小T,跟他说:“我们要加个需求,你放下手里的事情优先支持,我会一直等你做完再离开”.小T微笑着答应了,眼角却滑 ...

  7. java 并发基础,及案例分析

    对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了,然而并发问题是令我们大多数程序员头疼的问题,但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们深入研 ...

  8. Salesforce学习之路-developer篇(五)一文读懂Aura原理及实战案例分析

    1. 什么是Lightning Component框架? Lightning Component框架是一个UI框架,用于为移动和台式设备开发Web应用程序.这是一个单页面Web应用框架,用于为Ligh ...

  9. 软工案例分析之OJ

    项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 和我的团队开发一个真正的软件,一起提升开发与合作的能力 这 ...

随机推荐

  1. linux 常用简单命令

    1.ps获取dhcpd进程状态 ps -aux |grep dhcpd |grep -v grep  排除包含grep的那条进程 ps -aux |grep dhcpd |grep -v grep | ...

  2. 新手解读JSP

    一.解读简单JSP代码(承接上篇文章中的代码) 1. <%@ page language="java" contentType="text/html; charse ...

  3. js模拟队列----小优先队列

    队列:先进先出,后进后出 var Queue = (function(){ var item = new WeakMap(); class Queue{ constructor(){ item.set ...

  4. Css3动画属性总汇

    http://css3lib.alloyteam.com/uilib/animation/demo1/#cta Css3动画属性总汇 Stay hungry. Stay foolish. Attent ...

  5. 开源unittest测试报告源码BSTestRunner.py

    开源BSTestRunner 生成HTML测试报告源码: 保存代码到BSTestRunner.py 配合Unittest使用,很完美. python2: """ A Te ...

  6. unity3d中Transform组件变量详解

    Transform组件是每个游戏对象必须有的一个组建,因为你创建一个空物体,它也有该组建,因为unity3d是面向组建开发的一款游戏引擎.通过一张图片来看看它的属性 你可以在通过代码查看这些属性的区别 ...

  7. AngularJs ng-change事件/指令(转)

    from:http://blog.csdn.net/u011127019/article/details/52564111 定义和用法 ng-change 指令用于告诉 AngularJS 在 HTM ...

  8. uvm设计分析——field automation

    uvm中的field_automation主要实现了class中的基础元素的copy,compare等函数, 实现方式分为两种:1)用户注册,field系列宏:uvm内部调用static status ...

  9. 详解tween.js 中文使用指南

    补间(动画)是一个概念,允许你以平滑的方式更改对象的属性.你只需告诉它哪些属性要更改,当补间结束运行时它们应该具有哪些最终值,以及这需要多长时间,补间引擎将负责计算从起始点到结束点的值. 例如,pos ...

  10. Vue系列之 => 模拟购物车添加小球动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...