這是我的分析。
(**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