iT邦幫忙

DAY 17
0

初學 Golang 30 天系列 第 17

初學 Golang 30 天(十七)Interface

  • 分享至 

  • xImage
  •  

相信有學過物件導向的人都聽過 Interface ,GO 是靜態語言當然也有類似的 Interface 囉!
Interface
我們一起來看看 Go by Example 上面的範例:

package main

import "fmt"
import "math"

type geometry interface {
area() float64
perimeter() float64
}

type square struct {
width, height float64
}
type circle struct {
radius float64
}

func (s square) area() float64 {
return s.width * s.height
}
func (s square) perimeter() float64 {
return 2*s.width + 2*s.height
}

func (c circle) area() float64 {
return math.Pi * c.radius * c.radius
}
func (c circle) perimeter() float64 {
return 2 * math.Pi * c.radius
}

func measure(g geometry) {
fmt.Println(g)
fmt.Println(g.area())
fmt.Println(g.perimeter())
}

func main() {
s := square{width: 3, height: 4}
c := circle{radius: 5}

measure(s)
measure(c)
}

這個範例很簡單淺顯易懂,首先我們看到 interface 這邊,你會發現他的語法和 struct 很類似,裡面是繼承 area 跟 perimeter 的方法,然後後面利用 struct 建立正方形跟圓形的結構。

再往下看,定義的是 area 跟 perimeter 的方法,而引入的參數是前面用 struct 定義的結構,再來是定義 measure 函式,這個就很簡單,只是將當作參數的 interface 繼承的方法印出而已。

說明完定義的部份,接下來就很簡了,主函式這邊我們利用剛剛建立的 struct 建立兩個變數 s, c ,然後呼叫函式。以 measure(s) 來看,因為我們初始化 struct 的數值的時候給予 width: 3, height: 4,所以第一行會印出 {3 4},再來會印出 12 ,為什麼呢?因為他去呼叫 interface g 繼承的 area() 方法,然後方法是 s.width * s.height 所以自然就會印出 12 囉~因為 3 * 4 = 12 ,是不是很簡單阿。


上一篇
初學 Golang 30 天(十六)結構
下一篇
初學 Golang 30 天(十八)Package
系列文
初學 Golang 30 天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言