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

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

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


1. 前言



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


2. 匿名函数使用场景



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


3. 回调



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中我们可以把回调的结果做进一步处理。


4. 闭包



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. 函数是一等公民,即函数可以作为另一个函数的返回值或参数,还可以作为一个变量的值。
  2. 函数可以嵌套定义,即在一个函数内部可以定义另一个函数。
  3. 允许定义匿名函数。
  4. 可以捕获引用环境,并把引用环境和函数代码组成一个可调用的实体。


5. 小结



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


6. 关注公众号



微信公众号:堆栈future

相关文章
|
Go 数据库
Golang 语言编写 gRPC 实战项目
Golang 语言编写 gRPC 实战项目
136 0
|
关系型数据库 MySQL Linux
Docker(三)实战:-Docker部署Golang项目并关联Mysql容器
Dockerfile 文件是用于定义 Docker 镜像生成流程的配置文件,文件内容是一条条指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建;这些指令应用于基础镜像并最终创建一个新的镜像
1367 0
Docker(三)实战:-Docker部署Golang项目并关联Mysql容器
|
3月前
|
存储 人工智能 Go
golang 反射基本原理及用法
golang 反射基本原理及用法
29 0
|
6月前
|
存储 测试技术 Go
Golang框架实战-KisFlow流式计算框架(2)-项目构建/基础模块-(上)
KisFlow项目源码位于<https://github.com/aceld/kis-flow,初始阶段涉及项目构建和基础模块定义。首先在GitHub创建仓库,克隆到本地。项目目录包括`common/`, `example/`, `function/`, `conn/`, `config/`, `flow/`, 和 `kis/`。`go.mod`用于包管理,`KisLogger`接口定义了日志功能,提供不同级别的日志方法。默认日志对象`kisDefaultLogger`打印到标准输出。
663 7
Golang框架实战-KisFlow流式计算框架(2)-项目构建/基础模块-(上)
|
6月前
|
Go 开发者
Golang深入浅出之-Go语言项目构建工具:Makefile与go build
【4月更文挑战第27天】本文探讨了Go语言项目的构建方法,包括`go build`基本命令行工具和更灵活的`Makefile`自动化脚本。`go build`适合简单项目,能直接编译Go源码,但依赖管理可能混乱。通过设置`GOOS`和`GOARCH`可进行跨平台编译。`Makefile`适用于复杂构建流程,能定义多步骤任务,但编写较复杂。在选择构建方式时,应根据项目需求权衡,从`go build`起步,逐渐过渡到Makefile以实现更高效自动化。
97 2
|
6月前
|
Go
golang学习3,golang 项目中配置gin的web框架
golang学习3,golang 项目中配置gin的web框架
|
6月前
|
Go
第十二章 Golang家庭收支记账软件项目
第十二章 Golang家庭收支记账软件项目
87 2
|
6月前
|
Go
Golang type的两种用法
Golang type的两种用法
63 0
|
Cloud Native 安全 Java
构建高性能云原生应用:使用Golang的实践指南(邮件/短信发送、人脸识别、云点播、云直播项目)
构建高性能云原生应用:使用Golang的实践指南(邮件/短信发送、人脸识别、云点播、云直播项目)
|
Go 网络安全 开发工具
在golang中引入私有git仓库的pkg包?引入私有Git仓库的包:在Go语言项目中轻松实现
在golang中引入私有git仓库的pkg包?引入私有Git仓库的包:在Go语言项目中轻松实现
191 0
在golang中引入私有git仓库的pkg包?引入私有Git仓库的包:在Go语言项目中轻松实现
下一篇
无影云桌面