当前位置: 首页 > article >正文

go使用闭包处理数据

闭包的用处

闭包就是一个匿名函数,可以用来处理结构体返回值的封装,数值的比较等等

结构体返回值的封装

package main

import (
    "fmt"
    "strconv"
)

type Example struct {
    Options []string
}

func main() {
    //1
    fmt.Println(&Example{
       Options: func() []string { //2
          strs := []string{}
          for i := 0; i < 3; i++ {
             strs = append(strs, "hello"+strconv.Itoa(i))
          }
          return strs
       }(),
    })
}

如代码所示,想要给options赋值可以通过在1处定义一个变量赋值的方式,或者2处用闭包函数直接返回一个字符串的形式赋值,有时为了代码的规整性,可能选择2这种方式比较好一点,或者一些不太适宜1处样式赋值的场景选择2处赋值方式也是比较合理的

数值比较

type funcptr func(s string,strs []string) bool
func compare(s string,strs []string,funcptr2 funcptr) bool{
    return funcptr2(s,strs)
}

通过定义compare函数,传入funcptr2函数指针对应的匿名函数,类似于sort.slice()方法,在匿名函数中指定处理逻辑,然后根据返回的flag或者其他值做后续的处理

综上就是我目前所理解的闭包的两种常用方式,理解起来简单,但是使用的话还是需要比较多的技巧的


http://www.kler.cn/a/430674.html

相关文章:

  • [C/C++]智能指针是什么?实现原理是什么?
  • 【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理
  • 【网络安全产品大调研系列】1. 漏洞扫描
  • 工厂防静电监控系统设备静电监控仪的关键作用
  • 软件设计与体系结构
  • NLP 中文拼写检测开源-01-基于贝叶斯公式的拼写检查器 CSC
  • List与Set、数组与ArrayList、ArrayList与LinkedList的区别
  • 【kafka】常用基础命令使用案例
  • ViT学习笔记(三) RepViT和TransNext简介
  • 【定时任务】定时任务技术实现原理和选型分析
  • 分析比对vuex和store模式
  • vue-生命周期
  • 力扣 螺旋矩阵-54
  • vscode 配置C/C++环境控制台参数
  • 【FLASH、SRAM和DRAM、CISC和RISC、冯诺依曼和哈佛】单片机内存结构的了解
  • 网页核心页面设计(第5章)
  • 给我的小程序加了个丝滑的搜索功能,踩坑表情包长度问题
  • Win11家庭版安装Docker,解决engine stopped问题
  • 初始数据结构
  • 电脑文件夹打不开了,能打开但是会闪退,提示“找不到iUtils.dll”是什么原因?
  • 电脑运行时提示“0x80240037”错误,提示安装ie插件或其他微软程序时,报错提示“未指定的错误”是什么原因?以及要怎么解决和预防?
  • AUTOSAR AP和CP的安全要求规范(Safety Req)详细解读
  • SQL注入--堆叠注入
  • [漏洞挖掘与防护] 05.CVE-2018-12613:phpMyAdmin 4.8.1后台文件包含缺陷复现及防御措施
  • 【Java EE】Spring请求如何传递参数详解
  • Mac电脑钓鱼到拿下核心权限