go interface 强制转换
import (
"errors"
"strconv"
"strings"
)
var ErrUnsigned = errors.New("The input is smaller than 0 ")
func Force2uint64(input interface{}) (uint64, error) {
var res uint64
if m, ok := input.(string); ok {
if strings.Contains(m, "-") {
return 0, ErrUnsigned
}
res, err = strconv.ParseUint(m, 10, 64)
if err != nil {
return 0, err
}
}
if m, ok := input.(int); ok {
if m < 0 {
return 0, ErrUnsigned
}
res = uint64(m)
}
if m, ok := input.(float64); ok {
if m < 0 {
return 0, ErrUnsigned
}
res = uint64(m)
}
return res, nil
}
func Force2int(input interface{}) (int, error) {
var res int
if m, ok := input.(string); ok {
res, err = strconv.Atoi(m)
if err != nil {
return res, err
}
}
if m, ok := input.(int64); ok {
res = int(m)
}
if m, ok := input.(float64); ok {
res = int(m)
}
return res, nil
}
func Force2string(input interface{}) (string, error) {
var res string
if m, ok := input.(int); ok {
res = strconv.Itoa(m)
if err != nil {
return res, err
}
}
if m, ok := input.(uint64); ok {
res = strconv.FormatUint(m, 10)
}
if m, ok := input.(float64); ok {
res = strconv.FormatFloat(m, 'f', -1, 64)
}
return res, nil
}