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

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

涉及指向自定義類型的指針的 Go 賦值

涉及指向自定義類型的指針的 Go 賦值

Go
呼如林 2022-11-28 14:52:57
我正在使用自定義類型,當涉及如下指針時,我遇到了問題。以下代碼有效:package mainimport (    "fmt")type deck []stringfunc newDeck(cards ...string) deck {    return cards}下面的代碼也是有效的:package mainfunc str(n []string) *[]string {return &n}以下代碼無效。為什么這樣?我必須寫一個類型轉(zhuǎn)換return (*deck)(&cards)package mainimport (    "fmt")type deck []stringfunc newDeck(cards ...string) *deck {    return &cards // compiles with return (*deck)(&cards)}
查看完整描述

1 回答

?
Smart貓小萌

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

關(guān)于賦值(包括返回)的規(guī)則在Go 規(guī)范中定義:Assignability。與您的情況相關(guān)的是:

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

基礎(chǔ)類型

如果 T 是預(yù)先聲明的布爾值、數(shù)字或字符串類型之一,或者是文字類型,則對應(yīng)的基礎(chǔ)類型是 T 本身。

第一個示例編譯是因為它是一個具有底層類型(本身)[]string的未命名類型文字,并且是一個具有底層類型(根據(jù)您的類型定義)的命名類型。[]stringdeck[]string

第二個示例無法編譯,因為*[]string*deck都是未命名的類型文字,它們本身是(不同的)基礎(chǔ)類型。

要使第二個示例編譯,您不能依賴直接賦值,但正如您發(fā)現(xiàn)的那樣,使用顯式類型轉(zhuǎn)換

return (*deck)(&cards)

由于以下規(guī)則,此轉(zhuǎn)換有效:

忽略 struct 標記(見下文),x的類型 和T是未命名類型的指針類型,它們的指針基類型不是類型參數(shù)但具有相同的基礎(chǔ)類型。


查看完整回答
反對 回復 2022-11-28
  • 1 回答
  • 0 關(guān)注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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