大佬教程收集整理的这篇文章主要介绍了将任意Golang接口转换为字节数组,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试使用二进制包,但它似乎取决于传入的数据类型。Write()fn (docs)的一个参数需要知道参数的字节顺序。
所有的数据类型大小都是一个字节的几何(甚至是bool),所以这在理论上应该是简单的。
下面的代码,
package bloom import ( "encoding/gob" "bytes" ) // adapted from http://bretmulvey.com/hash/7.html func ComputeHash(key interface{}) (uint,error) { var buf bytes.buffer enc := gob.NewEncoder(&buf) err := enc.Encode(key) if err != nil { return 0,err } data := buf.bytes() var a,b,c uint a,b = 0x9e3779b9,0x9e3779b9 c = 0; i := 0; for i = 0; i < len(data)-12; { a += uint(data[i+1] | data[i+2] << 8 | data[i+3] << 16 | data[i+4] << 24) i += 4 b += uint(data[i+1] | data[i+2] << 8 | data[i+3] << 16 | data[i+4] << 24) i += 4 c += uint(data[i+1] | data[i+2] << 8 | data[i+3] << 16 | data[i+4] << 24) a,c = mix(a,c); } c += uint(len(data)) if i < len(data) { a += uint(data[i]) i++ } if i < len(data) { a += uint(data[i] << 8) i++ } if i < len(data) { a += uint(data[i] << 16) i++ } if i < len(data) { a += uint(data[i] << 24) i++ } if i < len(data) { b += uint(data[i]) i++ } if i < len(data) { b += uint(data[i] << 8) i++ } if i < len(data) { b += uint(data[i] << 16) i++ } if i < len(data) { b += uint(data[i] << 24) i++ } if i < len(data) { c += uint(data[i] << 8) i++ } if i < len(data) { c += uint(data[i] << 16) i++ } if i < len(data) { c += uint(data[i] << 24) i++ } a,C) return c,nil } func mix(a,c uint) (uint,uint,uint){ a -= b; a -= c; a ^= (c>>13); b -= c; b -= a; b ^= (a<<8); c -= a; c -= b; c ^= (b>>13); a -= b; a -= c; a ^= (c>>12); b -= c; b -= a; b ^= (a<<16); c -= a; c -= b; c ^= (b>>5); a -= b; a -= c; a ^= (c>>3); b -= c; b -= a; b ^= (a<<10); c -= a; c -= b; c ^= (b>>15); return a,c }
package bloom import ( "encoding/gob" "bytes" ) func GetBytes(key interface{}) ([]byte,error) { var buf bytes.buffer enc := gob.NewEncoder(&buf) err := enc.Encode(key) if err != nil { return nil,err } return buf.bytes(),nil }
以上是大佬教程为你收集整理的将任意Golang接口转换为字节数组全部内容,希望文章能够帮你解决将任意Golang接口转换为字节数组所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。