go interface 强制转换

时间:2025-03-01 22:04:41
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 }