欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > go语言中立即调用的匿名函数

go语言中立即调用的匿名函数

2025/3/16 4:21:00 来源:https://blog.csdn.net/2301_80223696/article/details/146189339  浏览:    关键词:go语言中立即调用的匿名函数

先看代码


type CachedProductQuery struct {productQuery ProductQuerycacheClient  *redis.Clientprefix       string
}func (c CachedProductQuery) GetById(productId int) (product Product, err error) {cachedKey := fmt.Sprintf("%s_%s_%d", c.prefix, "product_by_id", productId)cachedResult := c.cacheClient.Get(c.productQuery.ctx, cachedKey)err = func() error {if err := cachedResult.Err(); err != nil {return err}cachedResultByte, err := cachedResult.Bytes()if err != nil {return err}err = json.Unmarshal(cachedResultByte, &product)if err != nil {return err}return nil}()if err != nil {product, err = c.productQuery.GetById(productId)if err != nil {return Product{}, err}encoded, err := json.Marshal(product)if err != nil {return product, nil}_ = c.cacheClient.Set(c.productQuery.ctx, cachedKey, encoded, time.Hour)}return
}

利用缓存,优化服务的一段代码。

其中运用了立即调用的匿名函数:

err = func() error { ... }() 这种写法的目的是封装缓存获取过程中的错误处理,使代码更加简洁且易于管理。在 Go 语言中,这种写法可以有几个好处:

1. 封装错误处理逻辑

通过使用匿名函数,我们可以把一部分错误处理逻辑封装起来,避免在每个操作后都直接写出多个 if err != nil { return err }。这样可以让代码显得更加简洁,减少重复的错误检查。

2. 局部错误处理

在这种结构下,错误处理仅限于匿名函数内部。通过匿名函数,我们可以将错误范围限定在函数内部,避免影响到外部逻辑。例如,在这个例子中,匿名函数执行后返回一个错误,便于判断缓存获取是否成功。如果匿名函数出错,err 会被赋值并在外部做进一步处理。

3. 匿名函数的立即调用

func() error { ... }() 这种写法是 Go 语言中的一个常见技巧,叫做 立即调用的匿名函数(Immediately Invoked Function Expression, IIFE)。它允许我们在一个地方直接创建并执行一个匿名函数。这种写法通常用于:

  • 错误处理
  • 简化代码
  • 为局部变量限定作用域

在这个例子中,匿名函数没有参数,它会立刻执行并返回一个错误对象。如果函数内部没有发生错误,返回 nil

4. 避免污染外部作用域

匿名函数可以帮助减少在外部作用域中定义临时变量的数量。在这种情况下,err 只在匿名函数内部定义和使用,并且在匿名函数外部会被重新赋值,这样可以确保变量的作用域仅限于函数内部。

5. 简化错误逻辑

通过这种封装,可以把复杂的错误处理逻辑分离开来。代码看起来更加紧凑,并且可以快速定位错误处理部分,而不需要在每一步操作后都重复编写错误判断。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词