interface {}转换为unsafe.Pointer问题

I am doing some test about unsafe.Pointer. Suppose TestFun is a common library function, so "Person" struct should not appear in this function

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)
}

How could I do this ?

Instead of unsafe.Pointer(val), use unsafe.Pointer(&val). Because it accepts pointer.

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)
}