在閱讀 go 規(guī)范“可分配性”部分時(shí),我嘗試執(zhí)行幾個(gè)示例以更好地理解該主題,現(xiàn)在我無(wú)法理解我在代碼中做錯(cuò)了什么。根據(jù)規(guī)范,值x可分配給類型變量的一種T情況如下:x 的類型 V 和 T 具有相同的基礎(chǔ)類型,并且 V 或 T 中的至少一個(gè)不是定義的類型。定義的類型規(guī)范指出類型定義創(chuàng)建一個(gè)新的、不同的類型,它具有與給定類型相同的基礎(chǔ)類型和操作,并將標(biāo)識(shí)符綁定到它。但是當(dāng)我嘗試運(yùn)行以下代碼時(shí),構(gòu)建失?。篺unc main() { type Defined int32 var d Defined var i int32 d = i}輸出是:cannot use i (type int32) as type Defined in assignment同時(shí),使用復(fù)合文字的類似示例也可以正常工作:func main() { type MyMap map[string]int var x MyMap var y map[string]int x = y}
2 回答

撒科打諢
TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊

牧羊人nacy
TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊
由于type Defined int32
定義了一個(gè)新類型,d
并且i
沒(méi)有相同的類型;因此,第一個(gè)子句x 的類型與可分配性規(guī)范中的 T 相同是不適用的。第二個(gè)子句x 的類型 V 和 T 具有相同的基礎(chǔ)類型,并且 V 或 T 中的至少一個(gè)不是已定義類型不適用,因?yàn)閮烧叩念愋投际?code>i已d
定義類型。由于可分配性規(guī)范中的其余條款不適用于這種情況,因此分配失敗。更改type Defined int32
為type Defined = int32
(別名類型)修復(fù)了錯(cuò)誤。
x = y
由于T 是一個(gè)接口類型,并且 x 實(shí)現(xiàn)了可分配性規(guī)范中的 T 子句是適用的。
- 2 回答
- 0 關(guān)注
- 194 瀏覽
添加回答
舉報(bào)
0/150
提交
取消