go语言中的闭包(代码片段)

我想月薪过万 我想月薪过万     2022-12-28     608

关键词:

基本概念

闭包:函数 + 该函数使用到的变量 共同组成了 闭包

实现方式

通过 函数 返回函数 的方法实现

外层函数实现变量控制

内层函数实现逻辑控制

案例实践

 

实现代码

闭包法

package main

import (
	"fmt"
	"strings"
)

func makeSuffix(suffix string) func(string) string 
	return func(fileName string) string 
		if strings.HasSuffix(fileName, suffix) 
			return fileName
		 else 
			return fileName + suffix
		
	


func main() 
	f := makeSuffix(".jpg")
	fmt.Println(f("test"))
	fmt.Println(f("test.jpg"))

 

 普通方法

package main

import (
	"fmt"
	"strings"
)

func makeSuffix2(suffix string, fileName string) string 
	if !strings.HasSuffix(fileName, suffix) 
		return fileName + suffix
	
	return fileName


func main() 
	fmt.Println(makeSuffix2(".jpg", "test"))
	fmt.Println(makeSuffix2(".jpg", "test.jpg"))

 全局变量法

package main

import (
	"fmt"
	"strings"
)

var suffix string

func makeSuffix2(fileName string) string 
	if !strings.HasSuffix(fileName, suffix) 
		return fileName + suffix
	
	return fileName


func main() 
	suffix = ".jpg"
	fmt.Println(makeSuffix2("test"))
	fmt.Println(makeSuffix2("test.jpg"))

优点总结

  1. 闭包和普通方法相比,都可以达到变量私有,但是普通方法不能维持变量,每调用一次方法都得初始化一次变量
  2. 闭包和全局变量相比,都可以达到变量一次初始化,但是全局变量全局可以访问,不安全

所以,闭包好处可以总结为一句话:实现变量私有 + 初始化一次

golang中的匿名函数(闭包)(代码片段)

GO语言的匿名函数就是闭包,以下是《GO语言编程》中对闭包的解释 基本概念闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量不在这个代码块内或者任何全局上下文中定义,而是在定义代码块的环境中定... 查看详情

go语言学习笔记—基础—函数:闭包(closure)——引用了外部变量的匿名函数(代码片段)

闭包是引用了(函数外部)自由变量的函数。被引用的自由变量和函数一同存在,即使离开了自由变量所在的引用环境(例如在某个go源文件中导入某个package的闭包),我们仍可在闭包中继续使用这个自由... 查看详情

go语言学习之闭包函数(代码片段)

packagemainimport("fmt")//匿名函数1funcintSeq()func()intvararrInt=[10]int1,2,3,4,5,6,7,8,9,10i:=-1returnfunc()inti+=1returnarrInt[i]//带参数匿名函数2funcintSeq2()func(indexint)intvararrInt=[10]int0,1,2,3 查看详情

go语言中的函数(代码片段)

...递数据,返回值,函数将处理好的数据传递给调用者。Go语言中函数被称为一等公民(first-class)。意味着支持高阶函数,支持匿名函数,支持闭包等特性,可以满足接口等高级函数特性。2定义语法:定义:func函数名( 查看详情

015_go语言中的闭包

代码演示packagemainimport"fmt"funcintSeq()func()inti:=0returnfunc()inti++returnifuncmain()nextInt:=intSeq()fmt.Println(nextInt())fmt.Println(nextInt())fmt.Println(nextInt())newInts:=intSeq()fmt.Print 查看详情

golang/go语言闭包(closure)(代码片段)

闭包(closure)一个外层函数中有内层函数,该内层函数中操作了外层函数的局部变量(外层函数的参数或直接定义的变量),并且该外层函数的返回值就是这个内层函数,则内层函数和外层函数的局部... 查看详情

go语言基础:闭包_defer_recover(代码片段)

主要借鉴七米的博客文章目录闭包defer关键字defer执行时机练习面试题内置函数介绍panic/recover练习闭包先看一个例子:packagemainimport"fmt"funcsum012(x,yint)func()intreturnfunc()intreturnx+yfuncmain()f:=sum012(5,6)fmt.Prin 查看详情

go语言基础:闭包_defer_recover(代码片段)

主要借鉴七米的博客文章目录闭包defer关键字defer执行时机练习面试题内置函数介绍panic/recover练习闭包先看一个例子:packagemainimport"fmt"funcsum012(x,yint)func()intreturnfunc()intreturnx+yfuncmain()f:=sum012(5,6)fmt.Println(f 查看详情

go之匿名函数闭包(代码片段)

匿名函数go语言支持匿名函数,即像普通变量一样被引用或者传递funcmain()varvfunc(aint)intv=func(aint)intreturna*afmt.Println(v(5))//另一种写法s:=func(aint)intreturna*afmt.Println(s(7))GO语言的匿名函数就是闭包,《go语言编程》中对闭包的解释是:... 查看详情

go匿名函数和闭包(代码片段)

...函数和闭包。函数当然还可以作为返回值,但是在Go语言中函数内部不能再像之前那样定义函数了,只能定义匿名函数。匿名函数就是没有函数名的函数,匿名函数的定义格式如下:func(参数)(返回值)函数体匿名函... 查看详情

golangbasic_leaming4函数(代码片段)

阅读目录Go语言函数Go语言函数章节目录Go语言函数定义_声明_调用(超详细)一、定义一个普通函数1.1函数名1.2参数列表1.3返回参数列表1.4函数体二、参数列表简写三、函数返回值3.1同一类型的返回值3.2带有变量名的返回... 查看详情

go函数与闭包(代码片段)

...ase+value)funcmain()a:=adder(0)fori:=0;i<10;i++fmt.Println(a(i))3.其他语言的闭包python的闭包defadder():sum=0deff(value):nonlocalsumsum+=valuereturnsumreturnfpython原生支持闭包使用__closure__来查看闭包内容c++的闭包autoadder()autosum=0;return[=](intvalue)mutablesum+=valu... 查看详情

go语言学习之旅--函数(代码片段)

函数GoLang函数介绍Go语言中函数特性函数的定义匿名函数闭包deferinit函数GoLang函数介绍函数的go语言中的一级公民,我们把所有的功能单元都定义在函数中,可以重复使用。函数包含函数的名称、参数列表和返回值类型... 查看详情

go语言基础函数,数组,指针,结构体(代码片段)

...回值为什么闭包不会被垃圾回收defer内置函数panic、recover语言变量作用域数组数组定义数组+函数+宏定义二维数组指针make和new的区别二级指针的使用空指针指针数组将指针传入函数进行值的交换结构体自定义类型和类型别... 查看详情

golang之匿名函数和闭包(代码片段)

Go语言支持匿名函数,即函数可以像普通变量一样被传递或使用。使用方法如下:main.gopackagemainimport("fmt")funcmain()varvfunc(aint)intv=func(aint)intreturna*afmt.Println(v(6))//两种写法v1:=func(iint)intreturni*ifmt.Println(v1(7))GO语言的匿名函 查看详情

[go语言]函数介绍(代码片段)

函数函数是Go语言中的“第一公民”,具体表现:函数是一种类型,函数类型变量可以像其它类型变量一种使用,可以作为其它函数的参数或返回值,也可以直接调用运行;函数支持多值返回;支持闭... 查看详情

golang/go语言闭包(closure)(代码片段)

闭包(closure)一个外层函数中有内层函数,该内层函数中操作了外层函数的局部变量(外层函数的参数或直接定义的变量),并且该外层函数的返回值就是这个内层函数,则内层函数和外层函数的局部... 查看详情

go语言学习--go中闭包

Go语言支持匿名函数,即函数可以像普通变量一样被传递或使用。使用方法如下:packagemainimport("fmt")funcmain()varvfunc(aint)intv=func(aint)intreturna*afmt.Println(v(6))//两种写法v1:=func(iint)intreturni*ifmt.Println(v1(7))  GO语言的匿名函数就是闭包... 查看详情