package tracer import ( "strconv" "strings" ) // toFloat64 attempts to convert value into a float64. If it succeeds it returns // the value and true, otherwise 0 and false. func toFloat64(value interface{}) (f float64, ok bool) { switch i := value.(type) { case byte: return float64(i), true case float32: return float64(i), true case float64: return i, true case int: return float64(i), true case int16: return float64(i), true case int32: return float64(i), true case int64: return float64(i), true case uint: return float64(i), true case uint16: return float64(i), true case uint32: return float64(i), true case uint64: return float64(i), true default: return 0, false } } // parseUint64 parses a uint64 from either an unsigned 64 bit base-10 string // or a signed 64 bit base-10 string representing an unsigned integer func parseUint64(str string) (uint64, error) { if strings.HasPrefix(str, "-") { id, err := strconv.ParseInt(str, 10, 64) if err != nil { return 0, err } return uint64(id), nil } return strconv.ParseUint(str, 10, 64) }