func GetValueByType()

in utils/util.go [110:307]


func GetValueByType(value interface{}, vtype string) interface{} {
	switch vtype {
	case "int":
		return ToInt(value, 0)
	case "string":
		return ToString(value, "")
	case "float64":
		return ToFloat(value, float64(0))
	case "int64":
		return ToInt64(value, 0)
	case "bigint":
		return ToInt64(value, 0)
	case "bool":
		return ToBool(value, false)
	case "list<string>":
		return ToStringArray(value)
	case "list<int>":
		return ToIntArray(value)
	case "list<int64>":
		if vals, ok := value.([]any); ok {
			values := make([]int64, 0, len(vals))
			for _, v := range vals {
				values = append(values, ToInt64(v, 0))
			}
			return values
		}
	case "list<double>":
		if vals, ok := value.([]any); ok {
			values := make([]float64, 0, len(vals))
			for _, v := range vals {
				values = append(values, ToFloat(v, 0))
			}
			return values
		}
	case "list<float>":
		if vals, ok := value.([]any); ok {
			values := make([]float32, 0, len(vals))
			for _, v := range vals {
				values = append(values, ToFloat32(v, 0))
			}
			return values
		}
	case "list<list<float>>":
		if vals, ok := value.([]any); ok {
			values := make([][]float32, 0, len(vals))
			for _, vlist := range vals {
				if lists, ok := vlist.([]any); ok {
					list := make([]float32, 0, len(lists))
					for _, v := range lists {
						list = append(list, ToFloat32(v, 0))
					}
					values = append(values, list)
				}
			}

			return values
		}
	case "list<list<double>>":
		if vals, ok := value.([]any); ok {
			values := make([][]float64, 0, len(vals))
			for _, vlist := range vals {
				if lists, ok := vlist.([]any); ok {
					list := make([]float64, 0, len(lists))
					for _, v := range lists {
						list = append(list, ToFloat(v, 0))
					}
					values = append(values, list)
				}
			}

			return values
		}
	case "map<string,string>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[string]string, len(vals))
			for k, v := range vals {
				values[k] = ToString(v, "")
			}
			return values
		}
	case "map<string,int>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[string]int, len(vals))
			for k, v := range vals {
				values[k] = ToInt(v, 0)
			}
			return values
		}
	case "map<string,int64>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[string]int64, len(vals))
			for k, v := range vals {
				values[k] = ToInt64(v, 0)
			}
			return values
		}
	case "map<string,float>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[string]float32, len(vals))
			for k, v := range vals {
				values[k] = ToFloat32(v, 0)
			}
			return values
		}
	case "map<string,double>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[string]float64, len(vals))
			for k, v := range vals {
				values[k] = ToFloat(v, 0)
			}
			return values
		}
	case "map<int,int>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[int]int, len(vals))
			for k, v := range vals {
				values[ToInt(k, 0)] = ToInt(v, 0)
			}
			return values
		}
	case "map<int,int64>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[int]int64, len(vals))
			for k, v := range vals {
				values[ToInt(k, 0)] = ToInt64(v, 0)
			}
			return values
		}
	case "map<int,double>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[int]float64, len(vals))
			for k, v := range vals {
				values[ToInt(k, 0)] = ToFloat(v, 0)
			}
			return values
		}
	case "map<int,float>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[int]float32, len(vals))
			for k, v := range vals {
				values[ToInt(k, 0)] = ToFloat32(v, 0)
			}
			return values
		}
	case "map<int,string>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[int]string, len(vals))
			for k, v := range vals {
				values[ToInt(k, 0)] = ToString(v, "")
			}
			return values
		}
	case "map<int64,int>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[int64]int, len(vals))
			for k, v := range vals {
				values[ToInt64(k, 0)] = ToInt(v, 0)
			}
			return values
		}
	case "map<int64,int64>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[int64]int64, len(vals))
			for k, v := range vals {
				values[ToInt64(k, 0)] = ToInt64(v, 0)
			}
			return values
		}
	case "map<int64,double>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[int64]float64, len(vals))
			for k, v := range vals {
				values[ToInt64(k, 0)] = ToFloat(v, 0)
			}
			return values
		}
	case "map<int64,float>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[int64]float32, len(vals))
			for k, v := range vals {
				values[ToInt64(k, 0)] = ToFloat32(v, 0)
			}
			return values
		}
	case "map<int64,string>":
		if vals, ok := value.(map[string]any); ok {
			values := make(map[int64]string, len(vals))
			for k, v := range vals {
				values[ToInt64(k, 0)] = ToString(v, "")
			}
			return values
		}
	default:
		return value
	}

	return value
}