第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

string vs []byte 類型定義

string vs []byte 類型定義

Go
繁星點點滴滴 2022-10-24 15:43:34
如果我有此代碼,它將按預期工作:package mainimport "strconv"type text []bytefunc main() {   hello := text("hello")   _ = strconv.AppendQuote(hello, " world")}但這段代碼失敗了:package mainimport "strconv"type text stringfunc main() {   hello := text("hello")   // cannot use hello (type text) as type string in argument to strconv.Quote   _ = strconv.Quote(hello)}為什么一個通過,另一個失敗?我檢查了文檔 [1],但沒有看到任何解釋差異的內(nèi)容。https://go.dev/ref/spec#Type_definitions
查看完整描述

3 回答

?
喵喔喔

TA貢獻1735條經(jīng)驗 獲得超5個贊

您需要將語言規(guī)范中的幾個定義拼湊在一起,以了解發(fā)生了什么:

首先是可分配性:

x 的類型 V 和 T 具有相同的基礎(chǔ)類型,并且 V 或 T 中的至少一個不是定義的類型。

然后你需要檢查你的 V 和 T。

在您的第一個代碼片段中,您有type text []byte(V)和一個AppendQuote所需參數(shù)是[]byte(T)的函數(shù)。

V 和 T 是否具有相同的基礎(chǔ)類型?是的。text的基礎(chǔ)類型[]byte由您定義,并且[]byte是復合類型,其基礎(chǔ)類型是它本身。從類型

每個類型 T 都有一個基礎(chǔ)類型:如果 T 是預先聲明的布爾、數(shù)字或字符串類型之一,或者是類型文字,則相應的基礎(chǔ)類型是 T 本身

以及上面的段落:

復合類型——[...] slice,[...]——可以使用類型文字來構(gòu)造。

而且,V 或 T 中的至少一個不是定義的類型嗎?是的,[]byte如上所述是復合類型。

因此,類型的變量text可分配給[]byte,包括將參數(shù)傳遞給函數(shù)。


在您的第二個代碼片段中,您有type text string(V)和一個Quote所需參數(shù)是string(T)的函數(shù)。

V 和 T 是否具有相同的基礎(chǔ)類型?是的。一個根據(jù)定義,另一個是預先聲明的類型string(與上面的引用相同)。

最后,是否至少有一個 V 或 T不是定義的類型?不!兩者都是定義類型。text由您定義,并由字符串類型string中的語言規(guī)范定義:

預先聲明的字符串類型是字符串;它是一個定義的類型。

所以分配textstring不滿足可分配性的條件,它會產(chǎn)生編譯器錯誤。


查看完整回答
反對 回復 2022-10-24
?
開心每一天1111

TA貢獻1836條經(jīng)驗 獲得超13個贊

您正在尋找的是在可分配性下:

https://go.dev/ref/spec#Assignability

尤其是:

x 的類型 V 和 T 具有相同的基礎(chǔ)類型,并且 V 或 T 中的至少一個不是定義的類型。

在這兩種情況下,基礎(chǔ)類型都是相等的([]byte是必需的,text在情況 1 中傳遞,string是必需的,text在情況 2 中傳遞),但[]byte不是定義的類型string,所以它適用于第一種情況,但不適用于第二種情況.


查看完整回答
反對 回復 2022-10-24
?
子衿沉夜

TA貢獻1828條經(jīng)驗 獲得超3個贊

AppendQuote接受[]byte作為參數(shù),并且您hello被定義為text類型,這是[]byte您的類型定義中的一個,這就是它起作用的原因。

func strconv.AppendQuote(dst []byte, s string) []byte 見源代碼

而 Quote 接受字符串作為參數(shù),

func strconv.Quote(s string) string 見源代碼

你的 hello 類型是[]byte,而不是字符串。這就是為什么它不起作用。您要么必須使用第一種情況,要么將您的 hello 更改為字符串。例如_ = strconv.Quote("hello"),為了讓它工作。


查看完整回答
反對 回復 2022-10-24
  • 3 回答
  • 0 關(guān)注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號