9.闭包(重点)

package main

import (
    "fmt"
    "strings"
)

 判断以什么结尾,如果不是后面加一个后缀
func makeSuffix(suffix string) func(string) string { // 以suffix结尾
    return func(name string) string {
        if !strings.HasSuffix(name, suffix) {
            return name + suffix
        }
        return name
    }
}

func main() {
    fileTest := makeSuffix("文件名处理后")
    fmt.Println(fileTest("winter"))

    fmt.Println(makeSuffix("卧槽无情")("plus"))
}

接着闭包


func AddUpper() func (int) int {
    var n int = 10
    return func (x int) int {
        n = n + x
        return n
    }
}

//细节说明
//1.AddUpper 是一个函数,返回的数据类型是 fun (int) int
//2.返回的是一个匿名函数, 但是这个匿名函数引用到函数外的n,因此这个匿名函数就和n形成一 个整体,构成闭包。
//3.大家可以这样理解: 闭包是类, 函数是操作,n 是字段。函数和它使用到 n 构成闭包
//4.当我们反复的调用 f 函数时,因为 n 是初始化一次,因此每调用一次就进行累计。
//5.我们要搞清楚闭包的关键,就是要分析出返回的函数它使用(引用)到哪些变量,因为函数和它引
//用到的变量共同构成闭包。
//6.对上面代码的一个修改,加深对闭包的理解

func AddUpper2() func (int) int {
    var n int = 20
    var str string = "hello"

    return func (x int) int {
        n = n + x
        str += string(36)
        fmt.Println("str=", str)
        return n
    }
}

未完待续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容