golang匿名函数在项目中高阶用法

向量数据库大模型NoSQL数据库

立志在坚不欲说,成功在久不在速。——张孝祥

  1. 前言

学习过golang语言的从业者应该都知道匿名函数,或多或少都写过,但是如果写好匿名函数,让其在项目中发挥重大作用,那么有很多 高阶用法你需要铭记

  1. 匿名函数使用场景

匿名函数经常被用于实现回调函数、闭包等。

  1. 回调

  
package main  
  
import (  
 "fmt"  
 "math"  
)  
  
func main(){  
 // 调用函数,对每个元素进行求平方根的操作  
 arr := []float64{1,9,16}  
 visit(arr, func(v float64){  
  v = math.Sqrt(v)  
  fmt.Printf("平方根:%.2f ",v)  
 })  
   
   
 // 调用函数,对每个元素进行求平方操作  
 visit(arr, func(v float64){  
  v = math.Pow(v,2)  
  fmt.Printf("平方:%.0f ", v)  
 })  
}  
  
// 定义一个函数,遍历切片元素,对每个元素进行处理  
func visit(lst []float64, f func(float64)){  
 for _, value := range lst{  
  f(value)  
 }  
}  

结果是:

  
平方根:1.00  
平方根:3.00  
平方根:4.00  
-----------  
平方:1  
平方:81  
平方:256  

如上所述,我们在调用visit的时候,将回调匿名函数写好,这样等程序真正运行起来,就会将visit传入的参数挨个执行回调,这样在main中我们可以把回调的结果做进一步处理。

  1. 闭包

  
package main  
  
import (  
 "fmt"  
 "strings"  
)  
  
//给文件加后缀:如果输入的文件是全称直接返回,否则自动加后缀  
  
// 闭包的使用  
func makeSuffix(suffix string) func(string) string{  
 return func (name string) string{  
  // 如果name没有后缀就加上,如果有就返回原来的名字  
  if !strings.HasSuffix(name,suffix){  
   return name + suffix  
  }  
  return name  
 }  
}  
  
func main() {  
 // 返回一个闭包  
 f2 := makeSuffix(".log")  
 fmt.Println("文件处理后:",f2("access")) // access.log  
 fmt.Println("文件处理后:",f2("error.log")) // error.log  
}  

如上所述,当我们给文件加log后缀的时候可以按照上述步骤来写,这个时候如果后缀变成mp4,那么我只需要重新初始化makeSuffix就行了,这样的写法可以提升开发速度和程序的可复用性。

小结:

1. 加强模块化

闭包有益于模块化编程,便于以简单的方式开发较小的模块,从而提高开发速度和程序的可复用性。和没有使用闭包的程序相比,使用闭包可将模块划分得更小。

2. 抽象

闭包是数据和行为的组合,这使得闭包具有较好的抽象能力。

3. 简化代码

  1. 函数是一等公民,即函数可以作为另一个函数的返回值或参数,还可以作为一个变量的值。

  1. 函数可以嵌套定义,即在一个函数内部可以定义另一个函数。

  1. 允许定义匿名函数。

  1. 可以捕获引用环境,并把引用环境和函数代码组成一个可调用的实体。

  1. 小结

总之在项目中用好匿名函数,你的代码可复用性和可维护性会有质的提升,还在等什么,快快实践吧。

  1. 关注公众号

微信公众号: 堆栈future

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
如何利用云原生构建 AIGC 业务基石
AIGC即AI Generated Content,是指利用人工智能技术来生成内容,AIGC也被认为是继UGC、PGC之后的新型内容生产方式,AI绘画、AI写作等都属于AIGC的分支。而 AIGC 业务的部署也面临着异构资源管理、机器学习流程管理等问题,本次分享将和大家分享如何使用云原生技术构建 AIGC 业务。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论