2 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
您必須區(qū)分變量的“靜態(tài)類型”和“動(dòng)態(tài)類型”。
Go 中的每個(gè)變量都有一個(gè)靜態(tài)類型。一些例子:
在聲明is
a := 5
的靜態(tài)類型之后,關(guān)于.a
int
a
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)類型的值。

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)。
- 2 回答
- 0 關(guān)注
- 144 瀏覽
添加回答
舉報(bào)