Golang Go语言中初学,请问这是闭包的高阶函数吗?

发布于 1周前 作者 sinazl 来自 Go语言

func (apiService *ApiService) DeleteApisByIds(ids request.IdsReq) (err error) {
var apis []system.SysApi
err = global.GVA_DB.Find(&apis, “id in ?”, ids.Ids).Delete(&apis).Error
if err != nil {
return err
} else {
for _, sysApi := range apis {
success := CasbinServiceApp.ClearCasbin(1, sysApi.Path, sysApi.Method)
if !success {
return errors.New(sysApi.Path + “:” + sysApi.Method + “casbin 同步清理失败”)
}
}
e := CasbinServiceApp.Casbin()
err = e.InvalidateCache()
if err != nil {
return err
}
}
return err
}
咋看别人的例子都是 DeleteApisByIds 应该在匿名函数前面呢
Golang Go语言中初学,请问这是闭包的高阶函数吗?


更多关于Golang Go语言中初学,请问这是闭包的高阶函数吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

7 回复

go<br>func (apiService *ApiService) DeleteApisByIds(ids request.IdsReq) (err error) {<br> var apis []system.SysApi<br> err = global.GVA_DB.Find(&amp;apis, "id in ?", ids.Ids).Delete(&amp;apis).Error<br> if err != nil {<br> return err<br> } else {<br> for _, sysApi := range apis {<br> success := CasbinServiceApp.ClearCasbin(1, sysApi.Path, sysApi.Method)<br> if !success {<br> return errors.New(sysApi.Path + ":" + sysApi.Method + "casbin 同步清理失败")<br> }<br> }<br> e := CasbinServiceApp.Casbin()<br> err = e.InvalidateCache()<br> if err != nil {<br> return err<br> }<br> }<br> return err<br>}<br>

更多关于Golang Go语言中初学,请问这是闭包的高阶函数吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


请问 func 是匿名函数, DeleteApisByIds 又是个函数,这是什么写法呢?

func 是声明函数,不是声明匿名函数…

https://go.dev/tour/methods/4
这叫指针接收者方法,建议 op 先把基础大概过一遍

好的谢谢,我先过遍基础,别的语言转过来的,有点自大了,直接撸项目。。

你这不是初学了, 你这是没学啊🥺

在Go语言中,理解闭包和高阶函数的概念对于掌握函数式编程范式至关重要。首先,让我们明确一下这两个概念:

  1. 闭包(Closure):闭包是指一个函数以及其引用的环境组合而成的实体。在Go中,当一个函数内部定义了另一个函数,并且内部函数引用了外部函数的变量时,就形成了一个闭包。闭包允许内部函数访问并操作外部函数的局部变量,即使外部函数已经执行完毕。

  2. 高阶函数(Higher-Order Function):高阶函数是指可以接收函数作为参数,或者返回一个函数作为结果的函数。Go语言支持高阶函数,你可以很容易地定义和传递函数作为参数。

现在,回到你的问题:“这是闭包的高阶函数吗?” 这个问题需要具体的代码上下文才能准确回答。不过,如果有一个函数接收了另一个函数作为参数,并且这个被接收的函数是一个闭包(因为它引用了其外部作用域中的变量),那么我们可以说这个高阶函数使用了闭包作为参数。

简而言之,闭包和高阶函数是两个独立但相关的概念。一个高阶函数可以接收闭包作为参数,但这并不意味着所有高阶函数都必然涉及闭包,也不是所有闭包都必然在高阶函数中使用。要确定一个特定的函数是否是闭包的高阶函数,你需要查看它的定义和使用方式。

回到顶部