วันก่อน มีโอกาสได้ Pair programing กับ pongneng พี่อธิบายถึงเรื่องของ Struct ให้ฟัง ซึ่งเข้าใจง่ายมาก เลยอยากจะขอจดเก็บเอาไว้หน่อย
Struct คืออะไร
struct มันคือ type ที่เก็บรวบรวม field ต่างๆ เพื่อที่จะจัดกลุ่ม data เข้าไว้ด้วยกัน อธิบายง่ายๆ มันเหมือนเป็นกล่องใบหนึ่ง ที่ให้เรามัดของที่เกี่ยวข้องกัน ยัดใส่ลงไป
เริ่มต้นเรื่อง โดยปูพื้นฐานเรื่องของตัวแปร(Variable) กันก่อนเลย โดยพี่เล่าว่า ปกติเราประกาศ ตัวแปรใน ภาษา go มี 2 แบบ ดังด้านล่างนี้
// ประกาศตัวแปรแบบเต็ม
var bookTitle string
var price float32
var stock int
var available bool
bookTitle = "Clean Code"
price = 22.53
stock = 33
avaliable = true
// แบบ short หรือสายย่อ
bookTitle := "Clean Code"
price := 22.53
stock := 33
avaliable := true
จากนั้น เราอยาก composite data เพื่อ group มันเข้าด้วยกัน วิธีการนี้ ในทางภาษา Go เราจะใช้การ Declare Struct เพื่อที่จะให้สามารถ group fields เข้าไว้ด้วยกันได้ โดยประกาศให้มันเป็น type sturct แบบนี้
type Book struct {
bookTitle string
price float32
stock int
available bool
}
ต่อมาเราอยาก สร้าง function ที่ชื่อว่า isAvailable
ที่จะคอยเช็คว่า หนังสือนั้นใช้งานได้หรือเปล่า สิ่งที่เราจะทำ คือ การ pass object ของ Book มา เพื่อที่จะดูว่าค่า available ว่ามันเป็น true หรือ false
func isAvailable(b *Book) bool {
return b.available
}
แต่...ช้าก่อน ถ้าเราสังเกตดีๆ เราไม่ควรที่จะต้องส่ง object ของ Book มา แต่ isAvailable ควรจะรู้จักกับ Book ได้เองเลย หรือถ้าเข้าใจง่ายๆ คือ ฟังก์ชัน isAvailable
มันเป็นส่วนหนึ่งของ Book เสมอ
เราเลยต้องทำให้ isAvailable
มันสามารถเรียกผ่าน object ของ Book ได้เอง โดยวิธีการทำง่ายมาก คือ เราจะย้าย (b *Book)
มาวางไว้หน้าชื่อฟังก์ชันเพื่อระบุว่า มันเป็น method ของ Book
func (b *Book)isAvailable() bool {
return b.available
}
เพียงเท่านี้ เราเองก็สามารถที่จะเรียกใช้งาน isAvailable
ผ่าน book ได้แล้ว
func main() {
b := Book{}
b.bookTitle = "Clean Code"
b.price = 22.53
b.stock = 33
b.available = true
// เราสามารถเรียก isAvailable ผ่าน object Book ได้แล้ว
// จากเดิมแทนที่เราเองต้องเรียก isAvailable(b) --> b.isAvailable()
b.isAvailable()
}
สรุป
Struct เป็น type ที่ Go สร้างขึ้นมา เพื่อที่จะนำเอาข้อมูลที่อยู่ในโดเมนเดียวกันมามัดใส่เป็นก้อน
ส่วนการระบุ method ของ type โดยประกาศชื่อ type ด้านหน้าของ method นั่นเอง
package main
import "fmt"
type Book struct {
bookTitle string
price float32
stock int
available bool
}
func (b *Book) isAvailable() bool {
return b.available
}
func main() {
b := Book{}
b.bookTitle = "Clean Code"
b.price = 22.53
b.stock = 33
b.available = true
fmt.Println(b.isAvailable())
}
Top comments (0)