首頁 > 後端開發 > Golang > 主體

為什麼類型斷言失敗但轉換可以在 Go 中使用自訂類型?

Susan Sarandon
發布: 2024-11-04 08:41:30
原創
870 人瀏覽過

Why Does Type Assertion Fail But Conversion Work with Custom Types in Go?

Go 中的命名類型斷言和轉換

考慮以下場景,其中定義自訂類型來重新定義預定義類型:

<code class="go">type Answer string</code>
登入後複製

現在,讓我們嘗試在接受原始預定義類型的函數中使用此自訂類型:

<code class="go">func acceptMe(str string) {
    fmt.Println(str)
}

func main() {
    type Answer string
    var ans Answer = "hello"

    // Type assertion fails
    acceptMe(ans.(string)) 
    // Conversion works
    acceptMe(string(ans))
}</code>
登入後複製

類型斷言ans.(string) 失敗並出現錯誤:無效類型斷言:ans.(string)(左側非介面類型Answer)。另一方面,轉換字串(ans)成功。這種行為提出了一個問題:

為什麼類型斷言失敗,但轉換有效?

為了理解這一點,讓我們澄清類型斷言只適用於介面。介面可以具有任意基礎類型,因此類型斷言和類型切換至關重要。類型斷言傳回布林值以及結果,表示斷言成功。

相反,您的自訂類型 Answer 有一個固定的基礎類型,即字串。由於您已經知道確切的類型,因此不需要類型斷言,因為從 Answer 到字串的轉換始終會成功。此轉換的語法是 string(ans).

以上是為什麼類型斷言失敗但轉換可以在 Go 中使用自訂類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!