Like Share Discussion Bookmark Smile

J.J. Huang   2025-04-18   Getting Started Golang 06.介面   瀏覽次數:次   DMCA.com Protection Status

Go | 使用介面來實作計算機

💬 簡介

在 Go 語言中,介面提供了一種強大的方式來抽象化不同的行為和操作。在這篇文章中,我們將使用介面來實作一個簡單的計算機,並進行加減乘除等數學運算。這個範例將幫助你理解如何在計算機應用中使用介面來處理不同的運算操作。

圖片來源:Gophers


🔍 使用介面設計計算機

🧮 定義計算操作介面

首先,我們定義一個 Operation 介面,這個介面將包括所有計算操作的共同行為,例如:Calculate(計算)。我們將通過這個介面來實現加、減、乘、除等基本數學運算。

1
2
3
4
5
6
7
8
package main

import "fmt"

// 定義 Operation 介面,包含 Calculate 方法
type Operation interface {
Calculate() float64
}

🔧 實現具體的運算型別

接下來,我們將為加法、減法、乘法、除法等運算分別定義結構,並實現 Operation 介面中的 Calculate 方法。

🧮 加法

1
2
3
4
5
6
7
8
9
// 定義 Add 結構,表示加法操作
type Add struct {
a, b float64
}

// 實現 Operation 介面的 Calculate 方法
func (add Add) Calculate() float64 {
return add.a + add.b
}

➖ 減法

1
2
3
4
5
6
7
8
9
// 定義 Subtract 結構,表示減法操作
type Subtract struct {
a, b float64
}

// 實現 Operation 介面的 Calculate 方法
func (sub Subtract) Calculate() float64 {
return sub.a - sub.b
}

✖️ 乘法

1
2
3
4
5
6
7
8
9
// 定義 Multiply 結構,表示乘法操作
type Multiply struct {
a, b float64
}

// 實現 Operation 介面的 Calculate 方法
func (mul Multiply) Calculate() float64 {
return mul.a * mul.b
}

➗ 除法

1
2
3
4
5
6
7
8
9
10
11
12
13
// 定義 Divide 結構,表示除法操作
type Divide struct {
a, b float64
}

// 實現 Operation 介面的 Calculate 方法
func (div Divide) Calculate() float64 {
if div.b == 0 {
fmt.Println("Error: Division by zero!")
return 0
}
return div.a / div.b
}

🗜 使用介面進行運算處理

現在,我們已經為不同的計算操作定義了結構並實現了 Operation 介面中的 Calculate 方法。接下來,我們可以使用介面來進行多型處理,根據具體的運算型別來執行不同的計算操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main

import "fmt"

// 顯示計算結果的函式
func ShowCalculationResult(op Operation) {
fmt.Println("Result:", op.Calculate())
}

func main() {
// 建立加法、減法、乘法和除法操作的實例
add := Add{a: 5, b: 3}
sub := Subtract{a: 5, b: 3}
mul := Multiply{a: 5, b: 3}
div := Divide{a: 5, b: 2}

// 顯示每個運算的結果
fmt.Println("Addition:")
ShowCalculationResult(add)

fmt.Println("\nSubtraction:")
ShowCalculationResult(sub)

fmt.Println("\nMultiplication:")
ShowCalculationResult(mul)

fmt.Println("\nDivision:")
ShowCalculationResult(div)
}

輸出:

1
2
3
4
5
6
7
8
9
10
11
Addition:
Result: 8

Subtraction:
Result: 2

Multiplication:
Result: 15

Division:
Result: 2.5

📝 在這個範例中,我們定義了一個 Operation 介面來統一處理各種運算。無論是加法、減法、乘法還是除法,這些運算都實現了 Operation 介面的 Calculate 方法,可以在 ShowCalculationResult 函式中被統一處理。這正是介面多型的應用,使得我們的計算機能夠靈活處理各種運算。


🛠 優化:引入更多計算操作

到此為止,我們已經完成了基本的加法、減法、乘法、除法運算。當我們需要新增更多的計算操作(例如:求平方根、乘方等),只需要為這些操作定義新的結構並實現 Operation 介面,這樣就能輕鬆擴展功能。

💡 添加平方根運算

1
2
3
4
5
6
7
8
9
10
11
12
13
// 定義 SquareRoot 結構,表示平方根操作
type SquareRoot struct {
a float64
}

// 實現 Operation 介面的 Calculate 方法
func (sqrt SquareRoot) Calculate() float64 {
if sqrt.a < 0 {
fmt.Println("Error: Negative number cannot have a square root!")
return 0
}
return sqrt.a * sqrt.a
}

🆕 更新主函式

1
2
3
4
5
6
7
8
func main() {
// 建立新運算實例
sqrt := SquareRoot{a: 9}

// 顯示平方根結果
fmt.Println("\nSquare Root:")
ShowCalculationResult(sqrt)
}

新增輸出:

1
2
Square Root:
Result: 81

📝 如同我們展示的,新增運算操作非常簡單,只需要新增一個結構並實現 Operation 介面中的 Calculate 方法,即可使計算機支持新的功能。


🎯 總結

通過使用 Go 語言的介面,我們實現了一個簡單的計算機,能夠執行基本的加減乘除操作。我們將每個運算型別抽象成一個結構,並實現了統一的 Operation 介面,這樣使得我們可以根據需要靈活地擴展新的運算功能。介面的多型特性讓我們能夠以統一的方式處理不同的計算操作,從而提高了程式的可維護性和擴展性。

最後,建議讀者深入了解 Go 語言的介面特性,並將其應用於更複雜的場景中。

最後建議回顧一下 Go | 菜鳥教學 目錄,了解其章節內容。


註:以上參考了
Go