Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+76
View File
@@ -0,0 +1,76 @@
package cachev2
import (
"encoding/json"
"fmt"
"reflect"
"runtime"
)
// funcInvoke 函数调用
func funcInvoke(fun interface{}, args ...interface{}) (data interface{}, err error) {
ft := reflect.TypeOf(fun)
fv := reflect.ValueOf(fun)
if ft.Kind() != reflect.Func {
return nil, fmt.Errorf("CACHE:不是一个有效的函数")
}
funcArgsNum := ft.NumIn()
if len(args) != funcArgsNum {
return nil, fmt.Errorf("CACHE:参数未对齐错误,方法名:%s,方法参数数:%d,传入参数数:%d", runtime.FuncForPC(fv.Pointer()).Name(), funcArgsNum, len(args))
}
funcResNum := ft.NumOut()
if funcResNum < 1 {
return nil, fmt.Errorf("CACHE:没有返回值的无效调用,方法名:%s", runtime.FuncForPC(fv.Pointer()).Name())
}
// 调用函数
var funRes []reflect.Value
if funcArgsNum == 0 {
funRes = fv.Call(nil)
} else {
argsV := make([]reflect.Value, 0, len(args))
for _, arg := range args {
argsV = append(argsV, reflect.ValueOf(arg))
}
funRes = fv.Call(argsV)
}
data = funRes[0].Interface()
for _, ret := range funRes {
if ret.Type().String() == "error" {
e, ok := ret.Interface().(error)
if ok {
err = e
}
break
}
}
return
}
// serialJson 序列化为JSON
func serialJson(m interface{}) (string, error) {
b, err := json.Marshal(m)
if err != nil {
return "", err
}
return string(b), nil
}
// unSerialJson 从JSON字符串反序列化
func unSerialJson(str string, resObj interface{}) (m interface{}, err error) {
if resObj == nil {
err = json.Unmarshal([]byte(str), &m)
} else {
err = json.Unmarshal([]byte(str), &resObj)
m = resObj
}
if err != nil {
return nil, err
}
return
}