Golang闭包案例分析与普通函数对比

本文通过一个具体的Go语言示例,介绍了如何使用闭包来处理文件名后缀,对比了普通函数与闭包的不同之处,并解释了闭包的定义。

闭包案例

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后缀;用普通函数的话,传递完成后缀会消失,闭包会保存。

转载于:https://www.cnblogs.com/wt645631686/p/9495123.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值