Go语言之匿名函数(闭包)使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/javaxflinux/article/details/84655085

说明:
匿名函数的优越性在于可以直接使用函数内的变量,不必申明
示例代码1:

package main

import (
"fmt"
"strings"
)

func makeSuffix(suffix string) func(string) string {
	return func(name string) string {
		if strings.HasSuffix(name, suffix) == false {
			return name + suffix
		} else {
			return name
		}
	}
}

func makeSuffix2(suffix string, name string) string {
	if strings.HasSuffix(name, suffix) == false {
		return name + suffix
	} else {
		return name
	}
}


func main() {
	//使用闭包
	f1 := makeSuffix(".bmp")
	fmt.Println(f1("test"))
	fmt.Println(f1("pic"))
	f2 := makeSuffix(".jpg")
	fmt.Println(f2("test"))
	fmt.Println(f2("pic"))

	//使用普通函数
	fmt.Println(makeSuffix2(".bmp", "test"))
	fmt.Println(makeSuffix2(".bmp", "pic"))
}
运行结果:
test.bmp
pic.bmp
test.jpg
pic.jpg
test.bmp
pic.bmp

示例代码2:

package main

import "fmt"

func getSequence() func() int {
   i:=0
   return func() int {
      i+=1
     return i  
   }
}

func main(){
   /* nextNumber 为一个函数,函数 i 为 0 */
   nextNumber := getSequence()  

   /* 调用 nextNumber 函数,i 变量自增 1 并返回 */
   fmt.Println(nextNumber())
   fmt.Println(nextNumber())
   fmt.Println(nextNumber())
   
   /* 创建新的函数 nextNumber1,并查看结果 */
   nextNumber1 := getSequence()  
   fmt.Println(nextNumber1())
   fmt.Println(nextNumber1())
}
运行结果:
1
2
3
1
2

猜你喜欢

转载自blog.csdn.net/javaxflinux/article/details/84655085