iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
Modern Web

後端攻略筆記系列 第 13

Day 13 : Go Interface 入門 1 - 讓你的程式會變魔術!

  • 分享至 

  • xImage
  •  

Go interface:一招搞定多種付款方式!

想像這樣一個場景:你是商店老闆,店裡來了三個客人。
人員A 拿出信用卡,人員B 用 PayPal,人員C 想付現金。

你要怎麼收錢?能不能用同台收銀機?套一句年輕人的話:「當然可以啦!」

在 Go 語言裡,interface 就像是收銀機的魔法合約:

「只要你會付錢,我都收!」


實際場景比喻

你想像所有付款方法都是「客人」。
客人從口袋掏出「付款方法卡」,然後對你說:「我會付錢!」

不同的客人,拿出不同卡片(信用卡、PayPal、現金)。
但他們都有一個共同點,就是「都會付錢」這件事。

所以你這個老闆不必管他們怎麼付,只要知道:

「喔,那你付錢吧!」


Go 程式碼魔術示範

type Payment interface {
    Pay(amount float64) string  // 這就是付錢的魔法招式
}

type CreditCard struct {
    cardNumber string
}

func (c CreditCard) Pay(amount float64) string {
    return fmt.Sprintf("用信用卡付了 %.2f 元,刷掉錢錢!", amount)
}

type PayPal struct {
    email string
}

func (p PayPal) Pay(amount float64) string {
    return fmt.Sprintf("用 PayPal 付了 %.2f 元,輕鬆轉帳成功!", amount)
}

type Cash struct{}

func (c Cash) Pay(amount float64) string {
    return fmt.Sprintf("用現金付了 %.2f 元,咚咚!錢包變輕了!", amount)
}

主角登場,看看收銀機如何應對不同客人

var payMethod Payment

payMethod = CreditCard{cardNumber: "1234-5678-9876-5432"}
fmt.Println(payMethod.Pay(1000))

payMethod = PayPal{email: "user@example.com"}
fmt.Println(payMethod.Pay(750))

payMethod = Cash{}
fmt.Println(payMethod.Pay(500))

執行結果:

用信用卡付了 1000.00 元,刷掉錢錢!
用 PayPal 付了 750.00 元,輕鬆轉帳成功!
用現金付了 500.00 元,咚咚!錢包變輕了!

身歷其境感受 interface 魔力!

  • 你不需要問:「欸,你是信用卡還是 PayPal?」
  • 你也不需要寫一堆 if 來判斷付款方式,超浪費時間!
  • 一句話:「嘿,付錢!」所有支付方法都乖乖聽話。

這樣的彈性,程式就像會變魔術,可以隨時換不同的「道具」(付款方式),還不改變整個收銀流程。


什麼時候該用 interface?

就像魔法合約一樣,只要你有這項「指定技能」(Pay 方法),
不管你是什麼奇怪形狀或名字,我都一視同仁。

  • 不同東西,要做同一件事的時候。
  • 希望系統繼續進化加新功能,但不用花時間改舊程式碼。

小測試時間!

想像你現在要加一個「Apple Pay」的魔法卡片,你知道怎麼做了嗎?
只要寫一個新的 struct,實作 Pay 方法,加到原本的流程裡,就成功囉!



上一篇
Day 12 : Struct入門 3 - 遙控車 (方法回傳、多方法設計)
系列文
後端攻略筆記13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言