iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
Modern Web

golang後端入門分享系列 第 13

Day13-Go方法method

前言

Go 語言不像python等程式有 classes,但是提供你可以在某種型態上定義方法(method),method 其實是作用在接收器(receiver)上的一種函式,接收器是某種型別的變數,所以其實 method 也就是一種特殊型別的函式。

撰寫method

這裏來用 Go Tutorial 上的例子來示範如何撰寫一個 method:

package main
 
import (
   "fmt"
   "math"
)
 
type Vertex struct {
   X, Y float64
}
 
func (v Vertex) Abs() float64 {
   return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
 
func main() {
   v := Vertex{3, 4}
   fmt.Println(v.Abs()) // 5
}

解釋一下上述的程式碼,一開始先宣告一個名為 Vertex 結構型態,裡面的屬性包含 X(float64) 和 Y(float64),接著就是撰寫一個 method 了,這個 method 是以 Vertex 作為接收器,method 名稱為 Abs,最後回傳一個浮點數,接著 method 裡頭,即為對接收器的運算並回傳值。

方法 vs 函式

在前言的時候,有解釋到 method 即為特殊的函式,這裡我們來一樣以 Go Tutorial 上的例子來看,如何用函式來達到與 method 一樣的結果:

package main
 
import (
   "fmt"
   "math"
)
 
type Vertex struct {
   X, Y float64
}
 
func Abs(v Vertex) float64 {
   return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
 
func main() {
   v := Vertex{3, 4}
   fmt.Println(Abs(v))
}

結語

method 必須帶有接收器,本文章的皆以結構為接收器,其實 method 不侷限結構為接收器,你可以自己定義一個型態,例如整數或浮點數,或是指標都可以,配合自己的需求做調整。今天介紹了 method 給各位讀者,希望有讓各位讀者初步了解 method 的使用,也感謝您今天的閱讀!

參考來源

https://tour.golang.org/methods/1
https://tour.golang.org/methods/2


上一篇
Day12-指標Pointer
下一篇
Day14-Go函式function
系列文
golang後端入門分享30

尚未有邦友留言

立即登入留言