作者在「Go in Action」一書中寫道:「兩種不同類型的值不能相互賦值,即使它們兼容」。爲什麼我可以爲變量分配不同類型的值?
例如,我們不能將Duration
指定爲int64
或int64
至Duration
。
但是,這並不總是正確的,下面的任務將努力像X
值轉換回[]int
自動:
type X []int
var v []int = X([]int{1, 2, 3})
什麼是這兩種情況的區別?
作者在「Go in Action」一書中寫道:「兩種不同類型的值不能相互賦值,即使它們兼容」。爲什麼我可以爲變量分配不同類型的值?
例如,我們不能將Duration
指定爲int64
或int64
至Duration
。
但是,這並不總是正確的,下面的任務將努力像X
值轉換回[]int
自動:
type X []int
var v []int = X([]int{1, 2, 3})
什麼是這兩種情況的區別?
我將把你的spec這裏摘取最有意義的臺詞:
的X值是分配給類型T的變量在任何的這些(「x是分配給T」)例:
...
- X的V型和T具有相同的基礎類型和V中的至少一種或T不是命名類型。
在您的示例的基礎類型是[]int
每個案例和[]int
不命名類型,但一個切片。一個int
實際上會構成一個命名的類型(在宇宙中的塊預先聲明)和將具有本身作爲一個基本的類型,但[]int
不是命名類型爲詳細here:
布爾的命名實例,數字和字符串類型是 預先聲明的。可以使用 文字構造複合類型 - 數組,結構,指針,函數,接口,片,映射和通道類型。
每種類型T都有一個基礎類型:如果T是預先聲明的布爾型,數字或字符串類型 或類型文字之一,則相應的基礎類型是T本身。否則,T的相關 類型是T在其類型 聲明中引用的類型的基礎類型。
因此,如果你試圖使type X int
你不能夠將其分配到var v int
爲int
被命名類型和做是不符合規範給出的可轉讓性標準。