• Go:闭包


    闭包就是一个函数与其相关的引用环境组合的一个整体(实体)。

    package main
    
    import "fmt"
    
    func add() func(int) int {
    	i := 0
    	return func(j int) int {
    		i += j
    		return i
    	}
    }
    
    func main() {
    	f := add()
    	fmt.Println(f(1)) // 1
    	fmt.Println(f(2)) // 3
    	fmt.Println(f(3)) // 6
    }
    
    /*
    add 是一个函数,返回的数据类型是 func(int) int,它是一个匿名函数,这个
    匿名函数引用了函数外的i,因此这个匿名函数就和i形成了一个整体,构成闭包。
     */
    

    另一个示例:

    package main
    
    import (
    	"fmt"
    	"strings"
    )
    
    // 使用闭包形式检测一张图片后缀是否以 .png 结尾,如果不是则拼接上返回
    func checkImageSuffix(suffix string) func(string) string {
    	return func(name string) string {
    		if !strings.HasSuffix(name, suffix) {
    			return name + suffix
    		} else {
    			return name
    		}
    	}
    }
    
    func main() {
    	f := checkImageSuffix(".png")
    	fmt.Println(f("peiqi")) 	// peiqi.png
    	fmt.Println(f("luffy.png")) // luffy.png
    }
    

    显然如果使用传统的方法,也可以轻松实现这个功能,但是传统方法需要每次都传入后缀名,而闭包则可以保留上次引用的某个值,只需传入一次就可反复使用,这就是区别。

  • 相关阅读:
    startup毕业论文
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    install
    逻辑卷(lv)管理(LVM)
    mke2fs
    cat & 文件结束符
  • 原文地址:https://www.cnblogs.com/believepd/p/10920747.html
Copyright © 2020-2023  润新知