在Go中使用reflect.StringHeader是否安全?

问题描述

我有一个函数,它将Go字符串数据的指针传递给C(Lua库):

func (L *C.lua_State) pushLString(s string) {
    gostr := (*reflect.StringHeader)(unsafe.Pointer(&s))
    C.lua_pushlstring(L,(*C.char)(unsafe.Pointer(gostr.Data)),C.ulong(gostr.Len))
    // lua_pushlstring copies the given string,not keeping the original pointer.
}

它可以在简单的测试中工作,但是从文档中尚不清楚这是否完全安全。

根据DataFrame.pop,应该将reflect.StringHeader的内存固定为 gostr ,但是Stringheader.Data已经是uintptr“没有指针语义的整数值” -这本身很奇怪,因为如果它没有指针语义,那么字段将不会完全无用,因为在读取值后可能会立即移动内存?还是像reflect.Value.Pointer一样特别对待字段?还是有另一种从字符串获取C指针的方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)