[A Tour of Go 學習筆記] 08 interface 和 error
使用官方教學瞭解 Go interface 和 error
初入 Golang 的世界,首先我們使用官方教學:A Tour of Go
來認識基本的 Golang 使用
這篇介紹 interface 和 error
interface
概念有點像 PHP 裡面的 implement
定義 function name、接收的參數及型別、回傳的值與型別
並不定義實作方法,而是由繼承的對象個別實作
然而 Go 沒有繼承的機制,不需要明確的使用implement
關鍵字來聲明它實作了哪個 interface
無論是任何資料型別,只要實作了 interface 裡的定義,就等於自動實作了該 interface
interface 型別定義了一組方法,如果某個物件實現了某個介面的所有方法,則此物件就實現了此介面
package main
import "fmt"
type I interface {
M()
}
type T struct {
S string
}
// This method means type T implements the interface I,
// but we don't need to explicitly declare that it does so.
func (t T) M() {
fmt.Println(t.S)
}
func main() {
var i I = T{"hello"}
i.M()
}
/*
>>> hello
*/
這種特性也被稱為 Duck type
「當看到一隻鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那麼這隻鳥就可以被稱為鴨子。」
可以解釋為,當一個物件有實作鴨子這個 interface 的所有定義,那他就是鴨子
error
在 Go 中使用error
來表示錯誤狀態
和fmt.Stringer
類似,error 類型是一個內建(built-in) 的 interface
type error interface {
Error() string
}
通常會讓 function 回傳一個error
,並且判斷值是不是nil
來進行錯誤處理
i, err := strconv.Atoi("42")
if err != nil {
fmt.Printf("couldn't convert number: %v\n", err)
return
}
fmt.Println("Converted integer:", i)
當 error 為nil
時表示成功;非nil
的 error 表示失敗