Go 未定义:Windows10上的syscall.Mmap

Go 未定义:Windows10上的syscall.Mmap,go,winapi,system-calls,Go,Winapi,System Calls,我的Go项目中有此函数,我得到的错误如下: 未定义的syscall.Mmap 问题 Windows没有mmap(2)syscall-(以防万一:) Windows有很多用户和朋友 解决 我认为有两种方法: 使用“包装器”包,例如 它试图提供一个通用内存映射API 是跨平台的(也就是说,在POSIX平台上它将使用 mmap(2)和Windows上的is将使用Windows特定的API) 直接使用适当的Win32 API函数,而不是 syscall.Mmap 如果你走这条路,火车会停下来 包裹有

我的Go项目中有此函数,我得到的错误如下:

未定义的syscall.Mmap

问题 Windows没有
mmap(2)
syscall-(以防万一:)

Windows有很多用户和朋友

解决 我认为有两种方法:

  • 使用“包装器”包,例如 它试图提供一个通用内存映射API 是跨平台的(也就是说,在POSIX平台上它将使用
    mmap(2)
    和Windows上的is将使用Windows特定的API)

  • 直接使用适当的Win32 API函数,而不是
    syscall.Mmap

    如果你走这条路,火车会停下来 包裹有 相关功能随时可用

第三种方法是拥有自己的自定义实现 使用内存映射数据,该数据调用
syscall.Mmap
和Windows特定API之友。 这种实现应该包括使用 所谓的 有条件地编译特定于平台的特定目标 实现就像
golang.org/x/exp/mmap那样。
解决了这个问题 Windows没有
mmap(2)
syscall-(以防万一:)

Windows有很多用户和朋友

解决 我认为有两种方法:

  • 使用“包装器”包,例如 它试图提供一个通用内存映射API 是跨平台的(也就是说,在POSIX平台上它将使用
    mmap(2)
    和Windows上的is将使用Windows特定的API)

  • 直接使用适当的Win32 API函数,而不是
    syscall.Mmap

    如果你走这条路,火车会停下来 包裹有 相关功能随时可用

第三种方法是拥有自己的自定义实现 使用内存映射数据,该数据调用
syscall.Mmap
和Windows特定API之友。 这种实现应该包括使用 所谓的 有条件地编译特定于平台的特定目标 实现就像
golang.org/x/exp/mmap
一样

func memMap(fd uintptr, base int64) (mem []uint32, mem8 []byte, err error) {
    mem8, err = syscall.Mmap(
        int(fd),
        base,
        memLength,
        syscall.PROT_READ|syscall.PROT_WRITE,
        syscall.MAP_SHARED,
    )
    if err != nil {
        return
    }
    // Convert mapped byte memory to unsafe []uint32 pointer, adjust length as needed
    header := *(*reflect.SliceHeader)(unsafe.Pointer(&mem8))
    header.Len /= (32 / 8) // (32 bit = 4 bytes)
    header.Cap /= (32 / 8)
    mem = *(*[]uint32)(unsafe.Pointer(&header))
    return
}