package main

import (
    "fmt"
    "strings"
)
//go语言对闭包的 定义就是在函数内部去引用函数外部的变量 称为闭包 并且闭包是可以返回一个函数的 相对于python 闭包的执行是 需要先定义一个变量来接受闭包函数返回的值 然后一 接收变量()进行执行闭包 而python可以使用装饰器进行给一个函数加上闭包@闭包

// 闭包第一阶段
func calc(x, y int) func() {
    fmt.Println("我是第一个函数")
    return func() {
        fmt.Println("我是二个函数")
    }
}
func main() {
    //var re = calc(1, 2) //调用calc函数  返回的func进行再次调用
    //re()                //调用函数的函数
    var result = sub("xxxx")
    var re = result(".txt")
    fmt.Println(re)
}

// 闭包第二阶段 //判断闭包就是看是否引用外部变量
func sub(name string) func(names string) string {
    return func(names string) string {
        if !strings.HasSuffix(name, names) { //如果我传入name的结尾不等于.txt 就返回 name+names = xxx.txt  等于就返回name(xxxx)
            var result_name = name + names
            return result_name
        }
        return name
    }
}

//闭包第三阶段
最后修改:2022 年 11 月 29 日 03 : 50 PM
感谢您的,打赏!