在Go中将指针转换为数组

时间:2017-04-30 15:51:04

标签: arrays pointers memory go

这个问题与this one类似,只是我想将指针和长度转换为固定大小的Golang数组。

对于切片,solution是创建一个包含相关信息的结构,并直接转换它,如下所示:

// Slice memory layout
var sl = struct {
    addr uintptr
    len  int
    cap  int
}{addr, length, length}

// Use unsafe to turn sl into a []byte.
b := *(*[]byte)(unsafe.Pointer(&sl))

如何为指定的内存创建数组?

1 个答案:

答案 0 :(得分:1)

它几乎与切片相同但由于Go数组只是values laid out sequentially而不是由pointercaplen表示就像切片一样,你不需要定义数组的内存布局。

package main

import (
    "fmt"
    "reflect"
    "unsafe"
)

var data = []byte(`foobar`)

func main() {
    rv := reflect.ValueOf(data)

    ptr := rv.Pointer()
    b := *(*[3]byte)(unsafe.Pointer(ptr))

    fmt.Printf("%T %q\n", b, b)
}

https://play.golang.org/p/r9yi9OdDIC