интерфейс {} преобразовать в небезопасную проблему. Указатель - PullRequest
0 голосов
/ 12 июня 2019

Я делаю тест на небезопасность. Указатель.Предположим, что 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)
}

Как я могу это сделать?

1 Ответ

0 голосов
/ 12 июня 2019

Вместо 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...