golib/helper/conv_helper.go

140 lines
2.7 KiB
Go

//
// conv_helper.go
// Copyright (C) 2022 tiglog <me@tiglog.com>
//
// Distributed under terms of the MIT license.
//
package helper
import (
"strconv"
"unsafe"
)
func AnyToInt(val any, dv int) (int, error) {
switch val.(type) {
case int:
rv, _ := val.(int)
return rv, nil
case int8:
rv, _ := val.(int8)
return int(rv), nil
case int16:
rv, _ := val.(int16)
return int(rv), nil
case int32:
rv, _ := val.(int32)
return int(rv), nil
case int64:
rv, _ := val.(int64)
return int(rv), nil
case string:
sv, _ := val.(string)
rv, err := strconv.Atoi(sv)
if err != nil {
return dv, err
}
return rv, nil
case float32:
rv, _ := val.(float32)
return int(rv), nil
case float64:
rv, _ := val.(float64)
return int(rv), nil
}
return dv, nil
}
func AnyToFloat(val any, dv float64) (float64, error) {
switch val.(type) {
case int:
iv, _ := val.(int)
return float64(iv), nil
case int8:
iv, _ := val.(int8)
return float64(iv), nil
case int16:
iv, _ := val.(int16)
return float64(iv), nil
case int32:
iv, _ := val.(int32)
return float64(iv), nil
case int64:
iv, _ := val.(int64)
return float64(iv), nil
case string:
sv, _ := val.(string)
return strconv.ParseFloat(sv, 64)
case float32:
fv, _ := val.(float32)
return float64(fv), nil
case float64:
fv, _ := val.(float64)
return fv, nil
}
return dv, nil
}
// 只处理简单数据类型
func AnyToString(val any, dv string) (string, error) {
switch val.(type) {
case string:
sv, _ := val.(string)
return sv, nil
case int:
iv, _ := val.(int)
return strconv.Itoa(iv), nil
case int8:
iv, _ := val.(int8)
return strconv.FormatInt(int64(iv), 10), nil
case int16:
iv, _ := val.(int16)
return strconv.FormatInt(int64(iv), 10), nil
case int32:
iv, _ := val.(int32)
return strconv.FormatInt(int64(iv), 10), nil
case int64:
iv, _ := val.(int64)
return strconv.FormatInt(iv, 10), nil
case float32:
fv, _ := val.(float32)
return strconv.FormatFloat(float64(fv), 'f', -1, 64), nil
case float64:
fv, _ := val.(float64)
return strconv.FormatFloat(fv, 'f', -1, 64), nil
case bool:
bv, _ := val.(bool)
if bv {
return "true", nil
}
return "false", nil
}
return dv, nil
}
// BytesToString converts byte slice to string.
func BytesToString(b []byte) string {
return *(*string)(unsafe.Pointer(&b))
}
func Atoi(b []byte) (int, error) {
return strconv.Atoi(BytesToString(b))
}
func ParseInt(b []byte, base int, bitSize int) (int64, error) {
return strconv.ParseInt(BytesToString(b), base, bitSize)
}
func ParseUint(b []byte, base int, bitSize int) (uint64, error) {
return strconv.ParseUint(BytesToString(b), base, bitSize)
}
func ParseFloat(b []byte, bitSize int) (float64, error) {
return strconv.ParseFloat(BytesToString(b), bitSize)
}