SobesLab логотип SobesLab

Ответ

Да, компилятор Go делает необходимое преобразование автоматически, если это возможно. Если у *T есть метод, его можно вызвать на значении T – Go неявно возьмёт адрес. И наоборот, если у T есть метод, его можно вызвать через *T – Go разыменует указатель. Например, если `t` это T, то `tPtr.MethodVal()` и `tVal.MethodPtr()` будут работать (если tPtr *T, а MethodVal определён для T, MethodPtr для *T). Исключение – если значение не адресуемо, взять адрес не получится.