Как заставить компилятор управлять аргументами value / pointer-to-value func? - PullRequest
0 голосов
/ 28 сентября 2010

Работая с функциями go, я обнаружил, что нельзя заставить компилятор контролировать, передаю ли я значение или аргумент указатель на значение при использовании «универсального» интерфейса {} type.

func f(o interface{}) {
...
}

Наиболее очевидным решением является использование следующей модификации:

func f(o *interface{}) {
...
}

Хотя это успешно скомпилировано, я не нашел этот шаг правильным.Итак, есть ли способ заявить, что я хочу передать любой указатель ?

Ответы [ 2 ]

2 голосов
/ 28 сентября 2010

Вы должны использовать отражение .

import "reflect"

func f(o interface{}) {
  if _, ok := reflect.Typeof(o).(*reflect.PtrType); !ok {
    panic("Not a pointer")
  }
  // ...
}

Вы также можете рассмотреть unsafe.Pointer, но информация о типе будет потеряна.

1 голос
/ 28 сентября 2010

Нет.Во время компиляции interface{}, пустой интерфейс, любого типа.

все типы реализуют пустой интерфейс: interface{} Типы интерфейса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...