การดู : 0

12/04/2026 18:17น.

JS2GO EP.19 การทำงานกับ Events ใน JavaScript และ Go – Event Loop, Goroutines และ Channels

JS2GO EP.19 การทำงานกับ Events ใน JavaScript และ Go – Event Loop, Goroutines และ Channels

#Concurrent Programming

#Channels

#Goroutines

#Event Loop

#Go Events

#JavaScript Events

การจัดการ Events เป็นหัวใจสำคัญในการพัฒนาโปรแกรม ไม่ว่าจะเป็นการโต้ตอบกับผู้ใช้ การประมวลผลแบบ Asynchronous หรือระบบที่ทำงานแบบเรียลไทม์ ในบทความนี้เราจะเปรียบเทียบการทำงานกับ Events ใน JavaScript และ Go พร้อมเรียนรู้แนวทางปฏิบัติที่ดีที่สุดสำหรับแต่ละภาษา เพื่อช่วยให้การพัฒนาระบบของคุณมีประสิทธิภาพและลดข้อผิดพลาด

 

การจัดการ Events ใน JavaScript

 

1. Event-driven Programming ใน JavaScript

JavaScript เป็นภาษาที่ Event-driven โดยเฉพาะบนเว็บเบราว์เซอร์ ตัวอย่างเช่น การคลิกปุ่ม การพิมพ์ข้อความ หรือการโหลดหน้าเว็บ

 

ตัวอย่างการฟัง Event ด้วย addEventListener:

const button = document.querySelector("#myButton");

button.addEventListener("click", () => {
  console.log("Button clicked!");
});

 

การจัดการ Event แบบ Asynchronous ด้วย Promises และ async/await:

function fetchData() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve("Data loaded");
    }, 1000);
  });
}

async function loadData() {
  const data = await fetchData();
  console.log(data);
}

loadData();

 

2. Event Loop ใน JavaScript

JavaScript มี Event Loop ที่ช่วยให้ฟังก์ชัน asynchronous ทำงานแบบ non-blocking ฟังก์ชันเหล่านี้จะถูกจัดคิวและประมวลผลหลังจากงาน synchronous เสร็จสิ้น

 

ข้อดี:

  • ทำงานกับ Event ได้อย่างยืดหยุ่น
  • รองรับการทำงานแบบ Asynchronous

 

ข้อเสีย:

  • ต้องเข้าใจ Event Loop เพื่อหลีกเลี่ยงปัญหา callback hell หรือ race condition

 

การจัดการ Events ใน Go

 

1. Event Handling ใน Go

Go เป็นภาษาที่เน้น Concurrency การจัดการ Event มักใช้ Goroutines และ Channels เพื่อสื่อสารระหว่าง processes

 

ตัวอย่างการใช้งาน Goroutine และ Channel:

package main

import (
    "fmt"
    "time"
)

func main() {
    events := make(chan string)

    go func() {
        time.Sleep(1 * time.Second)
        events <- "Event received!"
    }()

    msg := <-events
    fmt.Println(msg)
}

 

คำอธิบาย:

  • events เป็น Channel สำหรับส่งข้อมูลระหว่าง Goroutines
  • Goroutine ทำงานแบบ Concurrent
  • การรับค่า msg := <-events จะรอจนกว่ามีข้อมูลส่งเข้ามา

 

2. Event-driven Pattern ใน Go

Go ไม่มีระบบ Event Loop แบบ JavaScript การทำงานแบบ Event-driven ต้องสร้างโครงสร้างเอง เช่น ใช้ select กับ Channels

select {
case msg := <-events:
    fmt.Println(msg)
case <-time.After(2 * time.Second):
    fmt.Println("Timeout")
}

 

ข้อดี:

  • Concurrency ของ Go ทำงานได้เร็วและปลอดภัยต่อ Thread
  • จัดการหลาย Event พร้อมกันได้ง่ายด้วย Channels

 

ข้อเสีย:

  • ต้องเข้าใจ Goroutines และ Channels
  • ต้องออกแบบโครงสร้าง Event-driven เอง

 

เปรียบเทียบการจัดการ Events: JavaScript vs Go

FeatureJavaScriptGo
หลักการทำงานEvent Loop, Non-blockingGoroutines + Channels, Concurrency
การจัดการ Event แบบ AsyncPromises, async/awaitGoroutines + Channels
ความง่ายในการเริ่มต้นง่ายสำหรับ Web UI และ Node.jsต้องเข้าใจ Concurrency และ Channels
การทำงานพร้อมกันNon-blocking แต่ต้องระวัง race conditionsรองรับหลาย Event พร้อมกันได้ดี
การใช้งานเหมาะกับWeb Applications, Asynchronous I/OServer, Backend, Concurrent Processing

 

แนวทางปฏิบัติที่ดีที่สุด

 

JavaScript

  • ใช้ addEventListener หรือ on[event] สำหรับ DOM Events
  • ใช้ Promises หรือ async/await แทน callback ซ้อนกัน
  • ระวัง race condition และ state management เมื่อทำงานแบบ asynchronous

 

Go

  • ใช้ Goroutines สำหรับงานที่ทำพร้อมกัน
  • ใช้ Channels สำหรับส่งและรับ Event ระหว่าง Goroutines
  • ใช้ select เพื่อจัดการหลาย Event หรือ Timeout
  • ออกแบบ Event-driven system ให้เหมาะสมกับ concurrency ของโปรแกรม

 


 

สรุป

 

  • JavaScript เหมาะกับ Event-driven programming บนเว็บและ Node.js โดยใช้ Event Loop และ async/await
  • Go เหมาะกับ Concurrent Event Handling ด้วย Goroutines และ Channels สำหรับงาน backend และ server

 

การเลือกวิธีจัดการ Event ขึ้นอยู่กับ ลักษณะโปรเจกต์ และ ภาษา ที่ใช้ การเข้าใจหลักการ Event ของแต่ละภาษา จะช่วยให้การพัฒนาระบบมีประสิทธิภาพ ลดข้อผิดพลาด และเพิ่มความเสถียรของโปรเจกต์

 

ตอนต่อไป

 

ใน EP.20 ของซีรีส์ JS2GO เราจะพาคุณไปเรียนรู้เกี่ยวกับ การใช้ Testing ใน Go และ JavaScript เพื่อให้คุณสามารถสร้างโค้ดที่มีคุณภาพ ปลอดภัย และมั่นใจได้ว่าทำงานถูกต้อง

 

อ่านบทความ 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/