这是我的分析。
(**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指针的Types部分中的基础类型示例。
type T1 int
type T2 T1
type T3 *T1
type T4 T3
基础类型的int
,T1
,和T2
是int
。底层类型*T1
,T3
和T4
是*T1
。
参考文献:
The Go Programming Language Specification
Conversions
Types
Properties of types and values
Type declarations
Predeclared identifiers
Pointer Type
谢谢。第三条线是我正在寻找的答案。 – Gunchars 2011-03-21 05:23:23
我想你也可以加上这个链接: http://golang.org/ref/spec#Type_identity 如果两个命名类型的名称来源于同一个TypeSpec,那么两个命名类型是相同的。所以myint!= int和* myint!= * int – 2013-02-17 17:20:45
@DanielSperry关于指针的声明似乎是错误的,因为示例的答案显示了如何从'* int'转换为'* myint',反之亦然从'* myint'到'* int'。只需要在双引用中更加明确一些。 – ceving 2014-02-04 12:07:19