首页> 基础笔记 >GoLang基础学习 >函数 函数

Golang闭包的最佳实践

作者:小萝卜 2023-04-06 浏览 225

简介我们体会一下闭包的好处,如果使用传统的方法,也可以轻松实现这个功能,但是传统方法需要每 次都传入后缀名,比如 .jpg ,而闭包因为可以保留上次引用的某个值,所以我们传入一次就可以反复 使用。

请编写一个程序,具体要求如下

1)编写一个函数   makeSuffix(suffix string)可以接收一个文件后缀名(比如.jpg),并返回一个闭包

2)调用闭包,可以传入一个文件名,如果该文件名没有指定的后缀  (比如.jpg) ,则返回文件名.jpg   ,如果已经有.jpg后缀,则返回原文件名。

3)要求使用闭包的方式完成

4)  strings.HasSuffix ,该函数可以判断某个字符串是否有指定的后缀。

代码:

package main
import (
	"fmt"
	"strings"
)

// 1)编写一个函数 makeSuffix(suffix string)  可以接收一个文件后缀名(比如.jpg),并返回一个闭包
// 2)调用闭包,可以传入一个文件名,如果该文件名没有指定的后缀(比如.jpg) ,则返回 文件名.jpg , 如果已经有.jpg后缀,则返回原文件名。
// 3)要求使用闭包的方式完成
// 4)strings.HasSuffix , 该函数可以判断某个字符串是否有指定的后缀。

func makeSuffix(suffix string) func (string) string {

	return func (name string) string {
		//如果 name 没有指定后缀,则加上,否则就返回原来的名字
		if !strings.HasSuffix(name, suffix)  {
			return name + suffix
		}

		return name
	}
}


func makeSuffix2(suffix string, name string)  string {


	//如果 name 没有指定后缀,则加上,否则就返回原来的名字
	if !strings.HasSuffix(name, suffix)  {
		return name + suffix
	}

	return name
	
}

func main() {
	
	//测试makeSuffix 的使用
	//返回一个闭包
	f2 := makeSuffix(".jpg") //如果使用闭包完成,好处是只需要传入一次后缀。
	fmt.Println("文件名处理后=", f2("winter")) // winter.jgp
	fmt.Println("文件名处理后=", f2("bird.jpg")) // bird.jpg

	fmt.Println("文件名处理后=", makeSuffix2("jpg", "winter")) // winter.jgp
	fmt.Println("文件名处理后=", makeSuffix2("jpg", "bird.jpg")) // bird.jpg

}

上面代码的总结和说明:

1)返回的匿名函数和   makeSuffix (suffix string)的    suffix变量组合成一个闭包, 因为返回的函数引用到 suffix这个变量

2)我们体会一下闭包的好处,如果使用传统的方法,也可以轻松实现这个功能,但是传统方法需要每次都传入后缀名,比如    .jpg ,而闭包因为可以保留上次引用的某个值,所以我们传入一次就可以反复使用。

很赞哦! (0)

文章评论

    高端网站建设