DEV Community

pop
pop

Posted on

Struct ง่ายนิดเดียว

วันก่อน มีโอกาสได้ Pair programing กับ pongneng พี่อธิบายถึงเรื่องของ Struct ให้ฟัง ซึ่งเข้าใจง่ายมาก เลยอยากจะขอจดเก็บเอาไว้หน่อย

Struct คืออะไร

struct มันคือ type ที่เก็บรวบรวม field ต่างๆ เพื่อที่จะจัดกลุ่ม data เข้าไว้ด้วยกัน อธิบายง่ายๆ มันเหมือนเป็นกล่องใบหนึ่ง ที่ให้เรามัดของที่เกี่ยวข้องกัน ยัดใส่ลงไป

Struct

เริ่มต้นเรื่อง โดยปูพื้นฐานเรื่องของตัวแปร(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
Enter fullscreen mode Exit fullscreen mode
// แบบ short หรือสายย่อ
bookTitle := "Clean Code"
price := 22.53
stock := 33
avaliable := true
Enter fullscreen mode Exit fullscreen mode

จากนั้น เราอยาก composite data เพื่อ group มันเข้าด้วยกัน วิธีการนี้ ในทางภาษา Go เราจะใช้การ Declare Struct เพื่อที่จะให้สามารถ group fields เข้าไว้ด้วยกันได้ โดยประกาศให้มันเป็น type sturct แบบนี้

type Book struct {
    bookTitle string
    price float32
    stock int
    available bool
}

Enter fullscreen mode Exit fullscreen mode

ต่อมาเราอยาก สร้าง function ที่ชื่อว่า isAvailable ที่จะคอยเช็คว่า หนังสือนั้นใช้งานได้หรือเปล่า สิ่งที่เราจะทำ คือ การ pass object ของ Book มา เพื่อที่จะดูว่าค่า available ว่ามันเป็น true หรือ false

func isAvailable(b *Book) bool {
    return b.available
}
Enter fullscreen mode Exit fullscreen mode

แต่...ช้าก่อน ถ้าเราสังเกตดีๆ เราไม่ควรที่จะต้องส่ง object ของ Book มา แต่ isAvailable ควรจะรู้จักกับ Book ได้เองเลย หรือถ้าเข้าใจง่ายๆ คือ ฟังก์ชัน isAvailable มันเป็นส่วนหนึ่งของ Book เสมอ

เราเลยต้องทำให้ isAvailable มันสามารถเรียกผ่าน object ของ Book ได้เอง โดยวิธีการทำง่ายมาก คือ เราจะย้าย (b *Book) มาวางไว้หน้าชื่อฟังก์ชันเพื่อระบุว่า มันเป็น method ของ Book

func (b *Book)isAvailable() bool {
    return b.available
}
Enter fullscreen mode Exit fullscreen mode

เพียงเท่านี้ เราเองก็สามารถที่จะเรียกใช้งาน 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()
}
Enter fullscreen mode Exit fullscreen mode

สรุป

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())
}

Enter fullscreen mode Exit fullscreen mode

Top comments (0)