สรุปสั้น ๆ
Interface การประกาศ Set ของ Method ใน Go ที่ไม่รู้ไม่ได้น้าาา
Interface การประกาศ Set ของ Method ใน Go ที่ไม่รู้ไม่ได้น้าาา
เขียนโดย
Sirasit Boonklang (Aeff)
Tech and Coding Consultant
บทความนี้ตีพิมพ์ และ เผยแพร่เมื่อ 16 พฤษภาคม 2566
สำหรับ Interface เป็นอีกหนึ่งฟีเจอร์ที่สำคัญของภาษา Go เรียกว่าถ้าจะเขียนโปรแกรมด้วยภาษา Go ตัวนี้เป็นพื้นฐานตัวนึงที่ Go Developer ต้องรู้เลย โดยการที่เราเข้าใจ Interface จะทำให้เราสามารถเขียนโค้ดได้ Flexible มากยิ่งขึ้น
ค่าของตัวแปรชนิด Interface สามารถเก็บค่าที่เป็น Type ไหนก็ได้สำหรับการ Implement Method นั้น ๆ โดยตัวอย่างหน้าตาของการใช้ Interface
package main
import (
"fmt"
"math"
)
type Abser interface {
Abs() float64
}
func main() {
var a Abser
f := MyFloat(-math.Sqrt2)
v := Vertex{3, 4}
a = f // a MyFloat implements Abser
a = &v // a *Vertex implements Abser
// In the following line, v is a Vertex (not *Vertex)
// and does NOT implement Abser.
a = v
fmt.Println(a.Abs())
}
type MyFloat float64
func (f MyFloat) Abs() float64 {
if f < 0 {
return float64(-f)
}
return float64(f)
}
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
โดยโค้ดนี้จะเป็นตัวอย่างการทำงานของ Interface ที่ชื่อว่า Abser โดยจะมี Method เดียวคือ Abs() ที่ Return ค่าออกมาเป็นเลขทศนิยมแบบ 64 bit โดย Type ไหนที่มีการ Implement Method นี้จะสามารถใช้งาน Interface ได้
โดยด้านบนจะมีการประกาศมา 2 Type คือ MyFloat และ Vertex
type MyFloat float64
type Vertex struct {
X, Y float64
}
ทั้ง MyFloat และ Vertex มี Method Abs() ที่ Return ค่าสัมบูรณ์ของตัวเลขหรือความยาวของจุด เนื่องจากทั้งสองประเภทมี Method นี้จึงใช้ Interface Abser ได้
ใน main ฟังก์ชัน ตัวแปร a ถูกประกาศเป็น Abser Type หมายความว่าสามารถเก็บค่าใด ๆ ที่ตรงกับ Interface ของ Abser ได้
var a Abser
จากนั้นตัวแปรสองตัว f และ v จะถูกประกาศเป็น MyFloat และ Vertex ตามลำดับ
f := MyFloat(-math.Sqrt2)
v := Vertex{3, 4}
โค้ดแสดงให้เห็นว่าทั้ง MyFloat และ Vertex ตอบสนอง กับ Abser Interface โดยกำหนดให้กับตัวแปร a
อย่างไรก็ตาม เมื่อค่าที่ไม่ใช่ Pointer ของ Vertex โดย v ถูกกำหนดให้กับตัวแปร a จะส่งผลให้เกิด Error ตอน Compile เนื่องจากค่า Vertex ไม่เป็นไปตาม Interface Abser
สุดท้าย Abs() จะเก็บค่าในตัวแปร a ที่เรียกใช้ แล้วก็ใช้ฟังก์ชัน fmt.Println แสดงผลลัพธ์ออกมานั่นเอง
จากโค้ดด้านบนจะเห็นการทำงานของ Interface ใน Go โดยการประกาศ Interface และการใช้งาน Interfaceใน 2 ประเภทที่แตกต่างกัน พร้อมวิธีการกำหนด Type ให้กับตัวแปรของ Type ของ Interface ต่าง ๆ นั่นเอง
หากใครอยากเรียนรู้พื้นฐานเกี่ยวกับภาษา Go เพิ่มเติม เรามีคอร์สเรียนฟรี ****Introduction to Go Programming Language สามารถศึกษาเพิ่มเติมได้ที่ลิงก์นี้เลยยย https://school.borntodev.com/course/introduction-to-go-programming-language
Reference: A Tour of Go
แนะนำสำหรับคุณ
เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า