feat(Go-Tool): 增加计算获取字符串哈希值的方法(这个是之前用于做分表系统的方法,搬到这边来看一下)
This commit is contained in:
@@ -26,6 +26,8 @@
|
|||||||
|
|
||||||
2020/7/8: 增加读取json文件方法及其单测类
|
2020/7/8: 增加读取json文件方法及其单测类
|
||||||
|
|
||||||
|
2020/7/13: 增加计算获取字符串哈希值的方法(这个是之前用于做分表系统的方法,搬到这边来看一下)
|
||||||
|
|
||||||
# mod vendor模式加载包
|
# mod vendor模式加载包
|
||||||
通过go mod的方式加载的github上面的包会有报红的问题,但是包本身是可以运行的,这样就是会有一个问题,如果你想要点击去看方法的内容,没办法做到
|
通过go mod的方式加载的github上面的包会有报红的问题,但是包本身是可以运行的,这样就是会有一个问题,如果你想要点击去看方法的内容,没办法做到
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* @Author : huangzj
|
||||||
|
* @Time : 2020/7/13 11:33
|
||||||
|
* @Description:
|
||||||
|
*/
|
||||||
|
|
||||||
|
package test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Go-Tool/util"
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
//不同方式获取哈希值,结果相差挺大,从输出的结果可以非常直观的看出
|
||||||
|
func TestHashMode(t *testing.T) {
|
||||||
|
fmt.Println(util.UseBigIntMod("3213444658987654", 9999999))
|
||||||
|
//因为big.Int只能接受大数,所以如果这边传入字符串没办法转换成功,会发生报错
|
||||||
|
//fmt.Println(util.UseBigIntMod("asdsadasdasdas", 20))
|
||||||
|
fmt.Println(util.Mod("3213444658987654", 9999999))
|
||||||
|
fmt.Println(util.Crc32Mode("3213444658987654", 9999999))
|
||||||
|
|
||||||
|
fmt.Println()
|
||||||
|
|
||||||
|
fmt.Println(util.Mod("asdsadasdasdas", 9999999))
|
||||||
|
fmt.Println(util.Crc32Mode("asdsadasdasdas", 9999999))
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
//通过hash算法获取字符串对应的哈希值
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"hash/crc32"
|
||||||
|
"math/big"
|
||||||
|
)
|
||||||
|
|
||||||
|
func bigInt(s string) (*big.Int, bool) {
|
||||||
|
bInt := new(big.Int)
|
||||||
|
return bInt.SetString(s, 10)
|
||||||
|
}
|
||||||
|
|
||||||
|
func UseBigIntMod(s string, mod int) int64 {
|
||||||
|
b, br := bigInt(s)
|
||||||
|
if !br {
|
||||||
|
panic("该方法只可用于大数mod计算")
|
||||||
|
}
|
||||||
|
|
||||||
|
result := b.Mod(b, new(big.Int).SetInt64(int64(mod)))
|
||||||
|
return result.Int64()
|
||||||
|
}
|
||||||
|
|
||||||
|
func calBytesSum(s string) int {
|
||||||
|
var sum int
|
||||||
|
for _, b1 := range bytes.NewBufferString(s).Bytes() {
|
||||||
|
sum = sum + int(b1)
|
||||||
|
}
|
||||||
|
|
||||||
|
return sum
|
||||||
|
}
|
||||||
|
|
||||||
|
func Mod(s string, mod int) int {
|
||||||
|
sum := calBytesSum(s)
|
||||||
|
return sum % mod
|
||||||
|
}
|
||||||
|
|
||||||
|
func crc32Change(s string) uint32 {
|
||||||
|
return crc32.ChecksumIEEE([]byte(s))
|
||||||
|
}
|
||||||
|
|
||||||
|
func Crc32Mode(s string, mod int) int {
|
||||||
|
u := crc32Change(s)
|
||||||
|
return int(u) % mod
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user