12/04/2026 18:16น.

JS2GO EP.32 การใช้งาน Linked Lists ใน Go เทียบกับ JavaScript
#JS2GO
#Data Structure
#Go
#JavaScript
#Linked List
Linked List คือโครงสร้างข้อมูล (Data Structure) แบบ Dynamic ที่ใช้เก็บข้อมูลโดยแต่ละ Node จะเชื่อมโยง (link) กันผ่าน pointer หรือ reference ช่วยให้สามารถ แทรก (insert) หรือ ลบ (delete) ข้อมูลได้อย่างรวดเร็วกว่า Array ในหลายกรณี
ในบทความนี้ เราจะเรียนรู้วิธีสร้างและใช้งาน Linked List ใน JavaScript และ Go พร้อมตัวอย่างโค้ดจริงและแนวทางปฏิบัติที่เหมาะสมสำหรับการใช้งานในโปรเจกต์จริง 🚀
1. แนวคิดของ Linked List
Linked List ประกอบด้วยองค์ประกอบหลัก 3 ส่วน:
- Node: เก็บข้อมูล (data) และ pointer/reference ไปยัง node ถัดไป
- Head: Node แรกของ list
- Tail: Node สุดท้ายที่ pointer จะชี้ไปที่
nullหรือnil
ประเภทของ Linked List
- Singly Linked List: เชื่อมโยงไปข้างหน้าเพียงทิศทางเดียว
- Doubly Linked List: เชื่อมโยงได้ทั้งข้างหน้าและข้างหลัง
2. การใช้งาน Linked List ใน JavaScript
ใน JavaScript ไม่มีโครงสร้าง Linked List แบบ built-in แต่สามารถสร้างเองได้ง่ายด้วย class
🔹 ตัวอย่าง: Singly Linked List
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
}
append(value) {
const newNode = new Node(value);
if (!this.head) {
this.head = newNode;
return;
}
let current = this.head;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
print() {
let current = this.head;
while (current) {
console.log(current.value);
current = current.next;
}
}
}
// ทดสอบ
const list = new LinkedList();
list.append(10);
list.append(20);
list.append(30);
list.print();
ผลลัพธ์:
10
20
30
ข้อดี JavaScript:
✔️ ใช้ class เขียนง่ายและเข้าใจได้ชัดเจน
✔️ โครงสร้าง Dynamic ปรับขนาดได้อัตโนมัติ
✔️ เหมาะกับงานที่ต้องเพิ่ม/ลบข้อมูลบ่อย
ข้อจำกัด:
⚠️ ไม่มี type checking
⚠️ ไม่มีโครงสร้าง Linked List มาตรฐานในภาษา
3. การใช้งาน Linked List ใน Go
Go มี package มาตรฐานชื่อว่า container/list สำหรับการใช้งาน Linked List ได้โดยตรง
🔹 ตัวอย่าง: ใช้ container/list
package main
import (
"container/list"
"fmt"
)
func main() {
linkedList := list.New()
linkedList.PushBack(10)
linkedList.PushBack(20)
linkedList.PushBack(30)
for e := linkedList.Front(); e != nil; e = e.Next() {
fmt.Println(e.Value)
}
}
ผลลัพธ์:
10
20
30
🔹 สร้าง Linked List เองแบบ Custom
package main
import "fmt"
type Node struct {
Value int
Next *Node
}
type LinkedList struct {
Head *Node
}
func (l *LinkedList) Append(value int) {
newNode := &Node{Value: value}
if l.Head == nil {
l.Head = newNode
return
}
current := l.Head
for current.Next != nil {
current = current.Next
}
current.Next = newNode
}
func (l *LinkedList) Print() {
current := l.Head
for current != nil {
fmt.Println(current.Value)
current = current.Next
}
}
func main() {
list := LinkedList{}
list.Append(10)
list.Append(20)
list.Append(30)
list.Print()
}
ข้อดี Go:
✔️ Type-safe และมี package มาตรฐานให้ใช้งานได้ทันที
✔️ ทำงานได้รวดเร็วและใช้หน่วยความจำมีประสิทธิภาพสูง
✔️ เหมาะกับระบบขนาดใหญ่หรือ backend ที่ต้องการ performance
ข้อจำกัด:
⚠️ Syntax ยาวกว่าภาษา JavaScript
⚠️ ต้องจัดการ pointer เอง
4. แนวทางปฏิบัติที่เหมาะสม (Best Practices)
✔️ ใช้ Linked List เมื่อต้อง insert/delete บ่อย เช่น Queue, Stack, หรือระบบ Scheduling
✔️ หลีกเลี่ยงการใช้ในงานที่ต้อง Random Access เนื่องจากต้อง traversal ผ่านทุก node
✔️ ใน Go ใช้ container/list ถ้าไม่ต้องการ implement เอง
✔️ ใน JavaScript ใช้ class เพื่อความชัดเจนและ modular
5. สรุปเปรียบเทียบ JavaScript vs Go
| Feature | JavaScript | Go |
|---|---|---|
| Structure | Custom class | Built-in (container/list) |
| Type Safety | Dynamic | Strongly typed |
| Performance | Moderate | High efficiency |
| Implementation | Manual (class) | Built-in or manual |
| Best Use Case | Lightweight data manipulation | High-performance systems |
คำแนะนำ
💡 Frontend / App-level logic: ใช้ JavaScript class เพื่อความยืดหยุ่น
⚙️ Backend / High-performance systems: ใช้ Go’s container/list หรือ implement เองเพื่อความเร็วสูงสุด
ตอนต่อไป
ใน EP.33 ของซีรีส์ JS2GO เราจะพาคุณไปเรียนรู้ 👉 “การใช้งาน Trees และ Graphs ใน Go และ JavaScript” เพื่อเข้าใจโครงสร้างข้อมูลขั้นสูงที่ใช้ในระบบจริง เช่น Social Graphs, File Systems, และ Search Algorithms 🌳
อ่านบทความ 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/