3 回答
TA貢獻1735條經驗 獲得超5個贊
您需要將語言規范中的幾個定義拼湊在一起,以了解發生了什么:
首先是可分配性:
x 的類型 V 和 T 具有相同的基礎類型,并且 V 或 T 中的至少一個不是定義的類型。
然后你需要檢查你的 V 和 T。
在您的第一個代碼片段中,您有type text []byte(V)和一個AppendQuote所需參數是[]byte(T)的函數。
V 和 T 是否具有相同的基礎類型?是的。text的基礎類型[]byte由您定義,并且[]byte是復合類型,其基礎類型是它本身。從類型:
每個類型 T 都有一個基礎類型:如果 T 是預先聲明的布爾、數字或字符串類型之一,或者是類型文字,則相應的基礎類型是 T 本身
以及上面的段落:
復合類型——[...] slice,[...]——可以使用類型文字來構造。
而且,V 或 T 中的至少一個不是定義的類型嗎?是的,[]byte如上所述是復合類型。
因此,類型的變量text可分配給[]byte,包括將參數傳遞給函數。
在您的第二個代碼片段中,您有type text string(V)和一個Quote所需參數是string(T)的函數。
V 和 T 是否具有相同的基礎類型?是的。一個根據定義,另一個是預先聲明的類型string(與上面的引用相同)。
最后,是否至少有一個 V 或 T不是定義的類型?不!兩者都是定義類型。text由您定義,并由字符串類型string中的語言規范定義:
預先聲明的字符串類型是字符串;它是一個定義的類型。
所以分配text給string不滿足可分配性的條件,它會產生編譯器錯誤。
TA貢獻1836條經驗 獲得超13個贊
您正在尋找的是在可分配性下:
https://go.dev/ref/spec#Assignability
尤其是:
x 的類型 V 和 T 具有相同的基礎類型,并且 V 或 T 中的至少一個不是定義的類型。
在這兩種情況下,基礎類型都是相等的([]byte是必需的,text在情況 1 中傳遞,string是必需的,text在情況 2 中傳遞),但[]byte不是定義的類型string,所以它適用于第一種情況,但不適用于第二種情況.
TA貢獻1828條經驗 獲得超3個贊
- 3 回答
- 0 關注
- 161 瀏覽
添加回答
舉報
