自学内容网 自学内容网

【Go语言入门学习笔记】Part7.闭包和defer关键字

一、前言

        闭包有点像对象,而defer适合于类似功能中利用资源时,提前写几句defer 释放资源,防止后面释放资源忘记写释放资源。

二、学习代码

package main

import (
"fmt"
)

// getC的返回值是一个函数,需要的参数为空,返回的那个参数需要的值为int类型,返回int类型,此所谓闭包
func getC() func(int) int {
var name int = 10
return func(num int) int {
name = num*num + name
return name
}
}

// defer后的语句不会被直接执行,而是压栈,函数执行完毕后出栈(先入后出)执行
func getSum(num1, num2 int) int {
defer fmt.Println("num1=", num1)
defer fmt.Println("num2=", num2)
//上面已经被压入栈中的变量不受影响
num1 += 10
num2 -= 10
fmt.Println("defer")
return num1 + num2
}

func main() {
//闭包
closebag := getC()         //这里面的name变量是私有的,会跟随传参计算变化
fmt.Println(closebag(100)) //name == 10010
fmt.Println(closebag(20))  //name == 10410
//调用defer的函数
fmt.Println(getSum(30, 70))
}


原文地址:https://blog.csdn.net/FellAveal/article/details/140179785

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!