为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中映射 X 的切片?

如何在 Go 中映射 X 的切片?

Go
料青山看我应如是 2021-06-18 18:02:39
我正在尝试使用launchpad.net/gommap内存映射数组int32和其他一些自定义结构类型。我严格想在它们位于映射区域的地方使用它们。该gommap.Mmap类型是[]byte,我怎样才能使这部分可作为一些其他类型的片?
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

你必须使用 unsafe 包。


func mapInt32(fd uintptr, prot gommap.ProtFlags, flags gommap.MapFlags) ([]int32, error) {

    mmap, err := gommap.Map(fd, prot, flags)

    if err != nil {

        return nil, err

    }

    header := (*reflect.SliceHeader)(unsafe.Pointer(&mmap))

    // account for the size different between byte and int32

    header.Len /= 4

    header.Cap = header.Len

    return *(*[]int32)(unsafe.Pointer(header)), nil

}

完成后,您可能希望设法取消内存映射。你可以通过以类似的方式不安全地将你的[]int32背投向 a来做到这gommap.MMap一点。


查看完整回答
反对 回复 2021-06-21
  • 1 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信