iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0
Modern Web

後端攻略筆記系列 第 14

Day 14 : Go Interface 入門 2

  • 分享至 

  • xImage
  •  

🚀 Go 語言超基礎 interface 入門教學 範例2

1. 再次複習interface 是什麼?

想像一下:你家裡有很多「遙控器」📺🕹️

  • 一個遙控器可以開電視
  • 一個遙控器可以控制冷氣
  • 但它們都有「按下去會做事」這個共通點

在 Go 裡,interface 就是用來規定某個東西「必須要有的功能」,而不是在乎它「是哪一種東西」。

比如說:

  • 我不在乎它是電視還是冷氣
  • 我只在乎它「能不能被打開」

2. 簡單範例

來一個最簡單的範例:

package main

import "fmt"

// 定義一個 interface,叫做 Opener(就是能打開的東西)
type Opener interface {
    Open()
}

// 定義一個「書本」結構
type Book struct{}

// 書本也會 Open
func (b Book) Open() {
    fmt.Println("打開書本 📖")
}

// 定義一個「門」
type Door struct{}

func (d Door) Open() {
    fmt.Println("打開大門 🚪")
}

func main() {
    // 這裡我用 interface 變數,裝不一樣的東西
    var o Opener

    o = Book{}
    o.Open() // 打開書本

    o = Door{}
    o.Open() // 打開大門
}

👉 執行結果:

打開書本 📖
打開大門 🚪

是不是很像「同一個遙控器」可以控制「不一樣的東西」?


3. 為什麼要用 interface?

想像一下,如果沒有 interface:

  • 你需要寫「OpenBook」
  • 再寫「OpenDoor」
  • 然後還要寫「OpenBox」…哇,越來越複雜!

但如果用 interface,我們只需要記得:

「喂,只要你會 Open(),我就能控制你!」

這樣程式碼更簡單、不怕變動。


4. 什麼時候該用 interface?

  • 不同東西會做「相同動作」的時候
    👉 書、門、箱子都可以「打開」。
  • 想要寫更通用的程式
    👉 之後再新增「更多東西」,不用改舊程式。
  • 減少重複的 if-else
    👉 不用一直判斷「這是書?是門?是箱子?」

5. 小結

  • interface = 規則、承諾
  • struct = 實際的物品
  • 當 struct 符合規則,就能藉由 interface 使用它

比喻:
「只要你承諾會跳舞💃,我就能邀請你來舞池;不管你是阿明還是小華,都沒差!」



上一篇
Day 13 : Go Interface 入門 1 - 讓你的程式會變魔術!
系列文
後端攻略筆記14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言