亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決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}以下代碼無效。為什么這樣?我必須寫一個類型轉換return (*deck)(&cards)package mainimport (    "fmt")type deck []stringfunc newDeck(cards ...string) *deck {    return &cards // compiles with return (*deck)(&cards)}
查看完整描述

1 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

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

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

基礎類型

如果 T 是預先聲明的布爾值、數字或字符串類型之一,或者是文字類型,則對應的基礎類型是 T 本身。

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

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

要使第二個示例編譯,您不能依賴直接賦值,但正如您發現的那樣,使用顯式類型轉換

return (*deck)(&cards)

由于以下規則,此轉換有效:

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


查看完整回答
反對 回復 2022-11-28
  • 1 回答
  • 0 關注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號