3 Star 0 Fork 1

tym_hmm/mongo-tool

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
math.go 2.41 KB
一键复制 编辑 原始数据 按行查看 历史
天蝎儿 提交于 4年前 . init
// Copyright (C) MongoDB, Inc. 2014-present.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
package util
import (
"fmt"
"reflect"
)
// Return the max of two ints
func MaxInt(a, b int) int {
if a > b {
return a
}
return b
}
// Numeric Conversion Tools
type converterFunc func(interface{}) (interface{}, error)
// this helper makes it simple to generate new numeric converters,
// be sure to assign them on a package level instead of dynamically
// within a function to avoid low performance
func newNumberConverter(targetType reflect.Type) converterFunc {
return func(number interface{}) (interface{}, error) {
// to avoid panics on nil values
if number == nil {
return nil, fmt.Errorf("cannot convert nil value")
}
v := reflect.ValueOf(number)
if !v.Type().ConvertibleTo(targetType) {
return nil, fmt.Errorf("cannot convert %v to %v", v.Type(), targetType)
}
converted := v.Convert(targetType)
return converted.Interface(), nil
}
}
// making this package level so it is only evaluated once
var uint32Converter = newNumberConverter(reflect.TypeOf(uint32(0)))
// ToUInt32 is a function for converting any numeric type
// into a uint32. This can easily result in a loss of information
// due to truncation, so be careful.
func ToUInt32(number interface{}) (uint32, error) {
asInterface, err := uint32Converter(number)
if err != nil {
return 0, err
}
// no check for "ok" here, since we know it will work
return asInterface.(uint32), nil
}
var intConverter = newNumberConverter(reflect.TypeOf(int(0)))
// ToInt is a function for converting any numeric type
// into an int. This can easily result in a loss of information
// due to truncation of floats.
func ToInt(number interface{}) (int, error) {
asInterface, err := intConverter(number)
if err != nil {
return 0, err
}
// no check for "ok" here, since we know it will work
return asInterface.(int), nil
}
var float64Converter = newNumberConverter(reflect.TypeOf(float64(0)))
// ToFloat64 is a function for converting any numeric type
// into a float64.
func ToFloat64(number interface{}) (float64, error) {
asInterface, err := float64Converter(number)
if err != nil {
return 0, err
}
// no check for "ok" here, since we know it will work
return asInterface.(float64), nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/tym_hmm/mongo-tool.git
git@gitee.com:tym_hmm/mongo-tool.git
tym_hmm
mongo-tool
mongo-tool
v1.0.5

搜索帮助