golang使用泛型
项目中有个需求,需要实现一个缓存请求结果的函数,可以接收传入不同的结构体参数和不同用这个参数去请求第三方接口的函数。为了实现需求我用到golang的泛型,这里记录一下。
type Aa struct {A stringAA string
}
type AaResp struct {A stringAA string
}func ARequest(param Aa) AaResp {fmt.Println(param)//请求第三方获取AaRespreturn AaResp{}
}type Bb struct {B stringBB string
}
type BbResp struct {B stringBB string
}func BRequest(param Bb) BbResp {fmt.Println(param)//请求第三方获取AaRespreturn BbResp{}
}type CachaStruct struct {Result anycacheString string
}func Cache[T any, R any](param T, requestFun func(param T) R, cacheKey string) R {var result RcacheData := 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 AaRespaResp = Cache(aParam, ARequest, aParam.A)fmt.Println(aResp)bParam := Bb{B: "111",BB: "111",}var bResp BbRespbResp = Cache(bParam, BRequest, bParam.B)fmt.Println(bResp)
}