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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么golang自定義錯(cuò)誤變量有多種類型

為什么golang自定義錯(cuò)誤變量有多種類型

Go
吃雞游戲 2023-06-01 18:05:19
我是一個(gè)新的地鼠,如果我定義了一個(gè)自定義錯(cuò)誤,我真的被變量類型搞糊涂了    import (        "fmt"        "reflect"    )    // custom errors    type myError struct {        msg string    }    func (m *myError) Error() string {        return m.msg    }    func errorGen() error {        return &myError{"custom error"}    }生成一個(gè)新錯(cuò)誤并檢查它的類型    func main() {        e := errorGen()        fmt.Println(reflect.TypeOf(e).Kind()) // type = pointer        // first type assertion        _, ok := e.(error)        if ok {            fmt.Println("type assertion error") // type = error        }        // second type assertion        _, ok = e.(*myError)        if ok {            fmt.Println("type assertion *myError") // type = pointer        }    }所以在上面的代碼中,變量“e”同時(shí)顯示了兩種類型。e 的類型到底是什么?為什么“錯(cuò)誤”是一個(gè)接口,也可以用作返回類型?非常感謝
查看完整描述

2 回答

?
滄海一幻覺

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊

您必須區(qū)分變量的“靜態(tài)類型”和“動(dòng)態(tài)類型”。

Go 中的每個(gè)變量都有一個(gè)靜態(tài)類型。一些例子:

  • 在聲明isa := 5的靜態(tài)類型之后,關(guān)于.ainta

  • e您代碼中的靜態(tài)類型是error(因?yàn)檫@是errorGen返回的)。

  • 您可以像這樣明確說明靜態(tài)類型var b uint16 = 9

現(xiàn)在 Go 中有接口類型。error是這樣的接口類型,請(qǐng)參閱彼得的回答。一些變量將具有error靜態(tài)類型;你e就是一個(gè)例子。現(xiàn)在,接口類型變量的全部目的是存儲(chǔ)實(shí)現(xiàn)該接口的各種類型的值。因此,一個(gè)不是 nil 的接口變量以某種方式“包含”另一個(gè)變量(實(shí)際上是一個(gè)值)。此包含值的類型可以是實(shí)現(xiàn)接口的任何類型。包含值的類型是“動(dòng)態(tài)類型”。類型斷言讓您可以提取此動(dòng)態(tài)類型的值。


查看完整回答
反對(duì) 回復(fù) 2023-06-01
?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊

Go 編程語言規(guī)范

錯(cuò)誤

預(yù)先聲明的類型錯(cuò)誤定義為

type?error?interface?{
????Error()?string
????}

它是表示錯(cuò)誤條件的常規(guī)接口,nil 值表示沒有錯(cuò)誤。

接口類型

接口類型指定稱為其接口的方法集。接口類型的變量可以存儲(chǔ)任何類型的值,方法集是接口的任何超集。據(jù)說這樣的類型實(shí)現(xiàn)了接口。


e實(shí)現(xiàn)預(yù)先聲明的接口類型error

? ? // first type assertion

? ? _, ok := e.(error)

? ? if ok {

? ? ? ? fmt.Println("type assertion error") // type = error

? ? }

e的具體類型是指向類型的指針myError。


? ? // second type assertion

? ? _, ok = e.(*myError)

? ? if ok {

? ? ? ? fmt.Println("type assertion *myError") // type = pointer

? ? }

兩種類型斷言都為真 ( okis true)。


查看完整回答
反對(duì) 回復(fù) 2023-06-01
  • 2 回答
  • 0 關(guān)注
  • 144 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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