首页 > 其他分享 >Go语言中泛型的一个用法

Go语言中泛型的一个用法

时间:2023-10-03 14:55:07浏览次数:43  
标签:struct OperationWithData 用法 func error Go 返回值 Operation 中泛

type OperationWithData[T any] func() (T, error)

type Operation func() error

func (o Operation) withEmptyData() OperationWithData[struct{}] {
	return func() (struct{}, error) {
		return struct{}{}, o()
	}
}

这段Go代码定义了两种类型:OperationOperationWithData,并提供了一种将 Operation 转换为 OperationWithData 的方法。

  1. type Operation func() error:这是一个函数类型,表示一个不带参数且可能返回错误的操作。它接受一个无参数的函数,并在执行时返回一个错误。例如,可以定义一个 Operation 类型的函数,执行某些操作并报告是否出现了错误。

  2. type OperationWithData[T any] func() (T, error):这也是一个函数类型,表示一个带有数据返回值和错误的操作。T 是一个泛型参数,表示返回的数据类型。它接受一个无参数的函数,并在执行时返回一个包含数据值和错误的元组。

  3. func (o Operation) withEmptyData() OperationWithData[struct{}]:这是一个方法,它是在 Operation 类型上定义的。它的目的是将不带数据返回值的 Operation 转换为带有空结构体数据返回值的 OperationWithData

    • Operation 接收者的 o 是一个 Operation 类型的值。
    • withEmptyData 方法返回一个 OperationWithData[struct{}] 类型的函数。

    在方法的内部,它返回了一个函数,该函数执行原始的 Operation,然后返回一个包含空结构体数据和操作结果的元组。这是因为 OperationWithData[struct{}] 类型要求带有数据返回值,即使不需要数据,也可以使用空结构体来满足这一要求。

    示例用法:

    // 定义一个不带数据返回值的操作
    noDataOperation := Operation(func() error {
        return nil
    })
    
    // 使用withEmptyData方法将其转换为带有空结构体数据返回值的操作
    withEmptyDataOperation := noDataOperation.withEmptyData()
    
    // 执行带有空结构体数据返回值的操作
    result, err := withEmptyDataOperation()
    if err != nil {
        fmt.Println("操作失败:", err)
    } else {
        fmt.Println("操作成功,返回的数据:", result)
    }
    

    这段代码演示了如何将不带数据返回值的操作 noDataOperation 转换为带有空结构体数据返回值的操作 withEmptyDataOperation 并执行它。

标签:struct,OperationWithData,用法,func,error,Go,返回值,Operation,中泛
From: https://www.cnblogs.com/tangjicheng/p/17741141.html

相关文章

  • Go - Creating JSON Data Streams from Structs
    Problem: YouwanttocreatestreamingJSONdatafromstructs.Solution: CreateanencoderusingNewEncoderintheencoding/jsonpackage,passingitanio.Writer.ThencallEncodeontheencodertoencodestructsdatatoastream. Theio.Writerinterfa......
  • Go - Creating JSON Data Byte Arrays from Structs
    Problem: YouwanttocreateJSONdatafromastruct.Solution: Createthestructsthenusethejson.Marshalorjson.MarshalIndenttomarshalthedataintoaJSONsliceofbytes. funcmain(){person:=struct{}data,err:=......
  • Java的HashMap用法
    一、HashMap了解HashMap是Java中常用的集合类之一,它实现了Map接口并继承自AbstractMap类。HashMap使用哈希表来存储键值对,通过将键映射为哈希码来进行高效的插入、查找和删除操作。以下是HashMap的常见用法和特点:键值对:HashMap允许存储任意类型的键和值。可以通过键来查......
  • Golang struct 结构体 面向对象编程思想-抽象 理解抽象
    我们在前面去定义一个结构体时候,实际上就是把一类事物的共有的属性(字段)和行为(方法)提取出来,形成一个物理模型(模板),这种研究问题的方法称为抽象。当你将一类事物的属性和行为抽取出来之后,下一步就是将代码体现出来。下面就是模拟银行卡存款取款查询余额方式。packagemainimport"fm......
  • Golang goroutine 进程、线程、并发、并行
    goroutine 看一个需求需求:要求统计1-200000000000的数字中,哪些是素数?分析思路:1)传统的方法,就是使用一个循环,循环的判断各个数是不是素数(一个任务就分配给一个cpu去做,这样很不划算,而且非常慢)2)使用并发或者并行的方式,将统计素数的任务分配给多个goroutine去完成,这时就会使用到gor......
  • Golang gorm manytomany 多对多 更新、删除、替换
       Delete移除只删除中间表的数据  删除原有的varaArticle1 db.Preload("Tag1s").Take(&a,1) fmt.Printf("%v",a){1k8s[{1cloud[]}{2linux[]}]}mysql>select*fromarticle1;+----+--------+|id|title|+----+--------+|1|k8s......
  • Golang gin Cookie的使用
    Cookie介绍HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否由同一个客户端发出Cookie就是解决HTTP协议无状态的方案之一,中文是小甜饼的意思Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同......
  • Golang Array 数组使用注意事项和细节
    在go数组当中,长度是数据类型的一部分[3]int  *[3]int  数组使用注意事项和细节1)数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化vara[3]inta[0]=1.1这样是不行的,必须是整数2)vararr[]int这时arr就是一个slice切片(如果[]里面没......
  • Gorm 错误处理
    在Go语言中,错误处理是很重要的。Go语言中鼓励人们在任何 创建方法之后去检查错误。错误处理由于GORM的链式API,GORM中的错误处理与惯用的Go代码不同,但它仍然相当容易。如果发生任何错误,GORM会将其设置为 *gorm.DB 的 Error 字段,你可以这样检查:iferr:=db.Where("na......
  • C PHP Go.md
    C语言1.visualStudiolnstaller安装去官网下载后点击exe文件,在弹出的窗口中点击继续后,选择c++桌面开发并点击安装。注册账号登录vsl的时候需要登录账号,所以需要试用邮箱创建一个账号。新建项目点击新建项目后,再点击控制台应用并下一步,输入项目名称、路径......