golang使用泛型

项目中有个需求,需要实现一个缓存请求结果的函数,可以接收传入不同的结构体参数和不同用这个参数去请求第三方接口的函数。为了实现需求我用到golang的泛型,这里记录一下。

bash 复制代码
type Aa struct {
	A  string
	AA string
}
type AaResp struct {
	A  string
	AA string
}

func ARequest(param Aa) AaResp {
	fmt.Println(param)
	//请求第三方获取AaResp
	return AaResp{}
}

type Bb struct {
	B  string
	BB string
}
type BbResp struct {
	B  string
	BB string
}

func BRequest(param Bb) BbResp {
	fmt.Println(param)
	//请求第三方获取AaResp
	return BbResp{}
}

type CachaStruct struct {
	Result      any
	cacheString string
}

func Cache[T any, R any](param T, requestFun func(param T) R, cacheKey string) R {
	var result R
	cacheData := CachaStruct{
		cacheString: cacheKey,
		Result:      &result,
	}
	if getCache(cacheKey, cacheData) {
		return cacheData.Result
	} else {
		result = requestFun(param)
		cacheData.Result = &result
		//setCache(cacheData) //这里懒得写set了。
	}
	return cacheData.Result
}
func getCache(cacheKey string, cacheData CachaStruct) bool {
	//查询cache是否存在,如果存在则返回
	return true
}

// 然后就可以通用了
func main() {
	aParam := Aa{
		A:  "111",
		AA: "111",
	}
	var aResp AaResp
	aResp = Cache(aParam, ARequest, aParam.A)
	fmt.Println(aResp)
	bParam := Bb{
		B:  "111",
		BB: "111",
	}
	var bResp BbResp
	bResp = Cache(bParam, BRequest, bParam.B)
	fmt.Println(bResp)
}
相关推荐
念何架构之路24 分钟前
Go pprof性能剖析
开发语言·后端·golang
姚不倒29 分钟前
Go语言实战:构建一个安全的计算器服务(接口、错误处理与Panic恢复)
云原生·golang
XMYX-016 小时前
37 - Go env 环境变量:配置管理与运行时控制
开发语言·golang
姚不倒1 天前
Go 进阶实战:实现泛型数据验证器
云原生·golang
XMYX-01 天前
36 - Go exec 执行命令
开发语言·golang
lolo大魔王1 天前
Go 语言 HTTP 协议与 RESTful API 实训全解(理论 + 实战 + 规范)
http·golang·restful
一只小逸白1 天前
LeetCode Go 常用函数速查表
linux·leetcode·golang
LCG元1 天前
【Go后端开发】从 0 到生产级:高性能分布式网关全实现 + 接口限流熔断降级实战
分布式·golang·wpf
姚不倒1 天前
Go语言进阶:接口、错误处理与并发编程(goroutine/channel/context)
云原生·golang
宇明一不急2 天前
go 链表 (标准库实现)
开发语言·链表·golang