12/04/2026 18:17น.

JS2GO EP.31 การใช้งาน Queues และ Stacks ใน JavaScript กับ Go
#JavaScript
#Go
#Queues
#Stacks
Queues และ Stacks เป็น Linear Data Structures ที่ใช้จัดการข้อมูลในลำดับเฉพาะ ซึ่งสำคัญสำหรับการจัดการ task, recursion, undo/redo หรือระบบ queue ในโปรเจกต์จริง บทความนี้สอนการสร้างและใช้งาน Queues และ Stacks ใน JavaScript และ Go พร้อมตัวอย่างโค้ดและแนวทางปฏิบัติที่เหมาะสม
1. Stack
Stack คือโครงสร้างข้อมูลแบบ LIFO (Last In, First Out)
JavaScript: Stack ด้วย Array
const stack = [];
// Push
stack.push(1);
stack.push(2);
stack.push(3);
console.log(stack); // [1,2,3]
// Pop
const top = stack.pop();
console.log(top); // 3
console.log(stack); // [1,2]
แนวทาง JavaScript:
✔️ ใช้สำหรับ undo/redo, function call, recursion
✔️ Array ของ JS สามารถใช้ push/pop ได้ตรงตัว
Go: Stack ด้วย Slice
package main
import "fmt"
func main() {
stack := []int{}
// Push
stack = append(stack, 1)
stack = append(stack, 2)
stack = append(stack, 3)
fmt.Println(stack) // [1 2 3]
// Pop
top := stack[len(stack)-1]
stack = stack[:len(stack)-1]
fmt.Println(top) // 3
fmt.Println(stack) // [1 2]
}
แนวทาง Go:
✔️ Slice สามารถ append/pop ได้ง่าย
⚠️ ต้องระวัง index out of range
2. Queue
Queue คือโครงสร้างข้อมูลแบบ FIFO (First In, First Out)
JavaScript: Queue ด้วย Array
const queue = [];
// Enqueue
queue.push(1);
queue.push(2);
queue.push(3);
// Dequeue
const first = queue.shift();
console.log(first); // 1
console.log(queue); // [2,3]
แนวทาง JavaScript:
✔️ ใช้สำหรับ task scheduling, event queue
⚠️ Array shift() มี performance cost สำหรับ array ขนาดใหญ่ → ใช้ linked list หรือ deque สำหรับ production
Go: Queue ด้วย Slice
package main
import "fmt"
func main() {
queue := []int{}
// Enqueue
queue = append(queue, 1)
queue = append(queue, 2)
queue = append(queue, 3)
// Dequeue
first := queue[0]
queue = queue[1:]
fmt.Println(first) // 1
fmt.Println(queue) // [2 3]
}
แนวทาง Go:
✔️ Slice สามารถใช้ append/dequeue ได้
⚠️ สำหรับ queue ขนาดใหญ่ ควรใช้ container/list เพื่อ efficiency
3. การใช้งาน Queues และ Stacks จริง
✔️ Undo/Redo: ใช้ stack สำหรับเก็บสถานะก่อนหน้า
✔️ Task scheduling: ใช้ queue สำหรับงาน background
✔️ DFS/BFS algorithms: Stack/Queue เป็นโครงสร้างหลัก
✔️ Concurrent Queue (Go): ใช้ channel แทน queue สำหรับ concurrency
ตัวอย่าง Go: Concurrent Queue ด้วย Channel
ch := make(chan int, 5)
go func() {
for i := 1; i <= 5; i++ {
ch <- i // Enqueue
}
close(ch)
}()
for val := range ch {
fmt.Println(val) // Dequeue
}
4. สรุปเปรียบเทียบ JavaScript vs Go
| Feature | JavaScript | Go |
|---|---|---|
| Stack | Array.push()/pop() | Slice append/pop |
| Queue | Array.push()/shift() | Slice append/dequeue or channel |
| Type Safety | ❌ No | ✔️ Yes |
| Concurrent Queue | Manual / library | Channel (built-in) |
| Use Cases | Undo/Redo, recursion | Task scheduling, concurrency |
คำแนะนำ:
✔️ Frontend / lightweight tasks → ใช้ JavaScript Array stack/queue
✔️ Backend / concurrent tasks → ใช้ Go slice stack/queue หรือ channel
ตอนต่อไป
ใน EP.32 ของซีรีส์ JS2GO เราจะพาคุณไปเรียนรู้ การใช้งาน Linked Lists ใน Go เทียบกับ JavaScript เพื่อเข้าใจการจัดการข้อมูลแบบ dynamic nodes และประยุกต์ใช้งานในโครงสร้างข้อมูลที่ซับซ้อน
อ่านบทความ Series อื่นๆ
🔵 Facebook: https://www.facebook.com/superdev.academy.th
🔴 YouTube : Superdev Academy
📸 Instagram: Superdev Academy
🎬 TikTok: https://www.tiktok.com/@superdevacademy?lang=th-TH
🌐 Website: https://www.superdevacademy.com/