Вот мой анализ.
(**myint)(&k)
- невозможно преобразовать &k
(type **int
) в type **myint
:
type **int
и type **myint
- безымянные типы указателейи их базовые типы указателей type *int
и type *myint
не имеют идентичных базовых типов.
Если T (*int
или *myint
) является литералом типа указателя, соответствующий базовый типСам T.
(*myint)(k)
- можно преобразовать k
(type *int
) в type *myint
:
type *int
и type *myint
- это безымянные типы указателей и их база указателейтипы type int
и type myint
(type myint int
) имеют идентичные базовые типы.
Если T (int
) является предварительно объявленным типом, соответствующим базовым типом является сам T.Если T (myint
) не является ни предопределенным типом, ни литералом типа, базовый тип T является базовым типом типа, на который ссылается T в своем объявлении типа (type myint int
).
(myint)(*k)
- можно преобразовать *k
(type int
) в type myint
:
type int
и type myint
имеют идентичные базовые типы.
Если T (int
) является предварительно объявленным типом, соответствующим базовым типом является сам T.Если T (myint
) не является ни предопределенным типом, ни литералом типа, базовый тип T является базовым типом типа, к которому относится T в своем объявлении типа (type myint int
).
Ниже приведен пример базового типа из раздела «Типы», пересмотренный для использования целых чисел и указателей int.
type T1 int
type T2 T1
type T3 *T1
type T4 T3
Базовый тип int
, T1
и T2
равен int
.Базовый тип *T1
, T3
и T4
равен *T1
.
Ссылки:
Спецификация языка программирования Go
Преобразования
Типы
Свойства типов и значений
Объявления типов
Предварительно объявленные идентификаторы
Тип указателя