golang中的闭包的再说明

复制代码
package  main

import (
   "fmt"
)

//函数返回值为一个函数,函数的参数是一个int的参数,返回值也是int
func getSum() func(int)int{
   var sum int = 0
   return func(num int) int {
      sum += num
      return  sum
   }
}
//闭包是什么,返回的匿名函数+匿名函数以外的那个变量sum,
//闭包就是一个函数和与其相关的引用环境组合的一个整体
func main() {

    f:= getSum() //没用形参的函数,赋值给F,f()调用的复制,相当于给getSum的返回值赋值,也就是func(int)int{},这个匿名函数的形参num =1

    fmt.Println(f(1))
    fmt.Println(f(2))
    fmt.Println(f(3))
//   匿名函数引用的变量会一直保存在内存中,可以一直使用
//闭包的本质,是一个匿名函数,这个匿名函数需要引入外部的参数
//匿名函数+引用的参数=闭包
// 返回的是一个匿名函数,但是这个匿名函数引用到的函数外的变量参数,因此这个匿名
//函数就和变量参数形成了一个整体,构成闭包
//闭包中使用的变量参数会一直保存在内存中,所以会一直使用,意味着闭包不可以滥用
//对内存消耗大,什么情况下使用闭包
    fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~")
    fmt.Println(getsum01(1))
    fmt.Println(getsum01(2))
    fmt.Println(getsum01(3))
    }
  func getsum01(num int)int{
   var sum int = 0
   sum += num
   return  sum
  }
//不使用闭包,想保留的值不可以反复使用,闭包可以保留上次引用的某个值,传入一次就可以反复使用
相关推荐
你不是我我6 小时前
【Java 开发日记】HTTP3 性能更好,为什么内网微服务依然多用 HTTP2?HTTP2 内网优势是什么?
java·开发语言·微服务
tjl521314_217 小时前
04C++ 名称空间(Namespace)
开发语言·c++
赏金术士7 小时前
Kotlin 数据流与单双向绑定
android·开发语言·kotlin
逻辑驱动的ken8 小时前
Java高频面试场景题25
java·开发语言·深度学习·面试·职场和发展
AI人工智能+电脑小能手9 小时前
【大白话说Java面试题】【Java基础篇】第32题:Java的异常处理机制是什么
java·开发语言·后端·面试
ltl9 小时前
Softmax 与概率分布:从分数到选择的桥
后端
刀法如飞9 小时前
Claude Code Skills 推荐:2026年最值得安装的10个AI技能
前端·后端·ai编程
無限進步D11 小时前
Java 面向对象高级 接口
java·开发语言
IT_陈寒11 小时前
Vite热更新失效?你可能漏了这个小细节
前端·人工智能·后端
两年半的个人练习生^_^11 小时前
Java日志框架和使用、日志记录规范
java·开发语言·开发规范