【问题标题】:Export function that returns array of doubles返回双精度数组的导出函数
【发布时间】:2017-04-11 03:58:13
【问题描述】:

在 Golang 中如何导出返回双精度数组的函数。以前可能的方式现在似乎返回“运行时错误:cgo 结果有 Go 指针”:

//export Init
func Init(filename string) (C.int, unsafe.Pointer) {
    var doubles [10]float64
    doubles[3] = 1.5
    return 10, unsafe.Pointer(&doubles[0])
}

【问题讨论】:

    标签: go cgo


    【解决方案1】:

    为了在 C 中安全地存储一个指针,它指向的数据必须在 C 中分配。

    //export Init
    func Init(f string) (C.size_t, *C.double) {
        size := 10
    
        // allocate the *C.double array
        p := C.malloc(C.size_t(size) * C.size_t(unsafe.Sizeof(C.double(0))))
    
        // convert the pointer to a go slice so we can index it
        doubles := (*[1<<30 - 1]C.double)(p)[:size:size]
        doubles[3] = C.double(1.5)
    
        return C.size_t(size), (*C.double)(p)
    }
    

    【讨论】:

    • 谢谢。像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    相关资源
    最近更新 更多