接口{}转换为不安全.指针问题



我正在做一些关于不安全的测试。指针。假设 TestFun 是一个常见的库函数,所以 "Person" 结构不应该出现在这个函数中

type Person struct {
    Name string
}
func main() {
    p := &Person{}
    p.Name = "TestName"
    TestFun(p)
}
func TestFun(val interface{}) {
    // I want to convert interface{} to unsafe.Pointer
    var pointer unsafe.Pointer
    // This Line compile error
    //pointer = unsafe.Pointer(val)
    // This is ok, but "Person" appears. This function is a common function, "Person" should not appear
    // pointer = unsafe.Pointer(val.(*Person))
    println(pointer)
}

我该怎么做?

代替 unsafe.Pointer(val) ,使用 unsafe.Pointer(&val) 。因为它接受指针。

package main
import (
    "unsafe"
)
type Person struct {
    Name string
}
func main() {
    p := &Person{}
    p.Name = "TestName"
    TestFun(p)
}
func TestFun(val interface{}) {
    // I want to convert interface{} to unsafe.Pointer
    var pointer unsafe.Pointer
    pointer = unsafe.Pointer(&val)
    println(pointer)
    u := (*interface{})(pointer)
    p := (*u).(*Person)
    println(p.Name)
}

最新更新