Byte Ebi's Logo

Byte Ebi 🍤

每天一小口,蝦米變鯨魚

[A Tour of Go 學習筆記] 08 interface 和 error

使用官方教學瞭解 Go interface 和 error

Ray

初入 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 的所有定義,那他就是鴨子

i am a duck

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 表示失敗

最新文章

Category

Tag