登录
首页 >  Golang >  Go问答

将任意 Golang 接口转换为字节数组

来源:Golang技术栈

时间:2023-04-13 21:47:11 237浏览 收藏

积累知识,胜过积蓄金银!毕竟在##column_title##开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《将任意 Golang 接口转换为字节数组》,就带大家讲解一下golang知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我正在尝试编写一个可以接受所有数据类型的哈希。进入函数后,我将数据作为字节数组处理。我无法弄清楚如何将任意interface{}转换为字节数组。

我尝试使用二进制包,但它似乎取决于传入的数据类型Write()。fn (docs)的参数之一需要知道参数的字节顺序。

所有数据类型的大小都是字节的倍数(甚至是布尔值),所以理论上这应该很简单。

下面有问题的代码,

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 >13);
    b -= c; b -= a; b ^= (a>13);
    a -= b; a -= c; a ^= (c>>12);
    b -= c; b -= a; b ^= (a>5);
    a -= b; a -= c; a ^= (c>>3);
    b -= c; b -= a; b ^= (a>15);

    return a, b, c
}

正确答案

我的代码中的其他问题让我gob早先离开了这个包,结果证明这是@nvcnvn 建议的正确方法。有关如何解决此问题的相关代码如下:

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学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表