การดู : 0

12/04/2026 18:17น.

JS2GO EP.21 การจัดการไฟล์และ I/O ใน JavaScript และ Go

JS2GO EP.21 การจัดการไฟล์และ I/O ใน JavaScript และ Go

#Concurrent I/O

#Backend

#programming

#JS2GO

#File Handling

#I/O

#Go

#JavaScript

#Node.js

การจัดการไฟล์และ Input/Output (I/O) เป็นทักษะสำคัญสำหรับนักพัฒนา ไม่ว่าจะเป็นงานเว็บ แอปพลิเคชัน หรือระบบ backend การอ่านและเขียนไฟล์อย่างมีประสิทธิภาพช่วยให้ระบบทำงานได้เสถียร ปลอดภัย และรองรับการประมวลผลข้อมูลขนาดใหญ่ ในบทความนี้เราจะเปรียบเทียบ การจัดการไฟล์ใน JavaScript (Node.js) และ Go พร้อมตัวอย่างโค้ดและแนวทางปฏิบัติที่เหมาะสม เพื่อให้คุณสามารถจัดการไฟล์ได้อย่างมืออาชีพ

 

I/O ใน JavaScript (Node.js)

 

JavaScript บน Node.js มี module fs สำหรับจัดการไฟล์ รองรับทั้ง synchronous และ asynchronous

 

การอ่านไฟล์แบบ synchronous

const fs = require('fs');

try {
  const data = fs.readFileSync('example.txt', 'utf8');
  console.log('File content:', data);
} catch (err) {
  console.error('Error reading file:', err);
}

 

การอ่านไฟล์แบบ asynchronous

const fs = require('fs');

fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) {
    console.error('Error reading file:', err);
    return;
  }
  console.log('File content:', data);
});

 

การเขียนไฟล์

fs.writeFile('output.txt', 'Hello, world!', 'utf8', (err) => {
  if (err) {
    console.error('Error writing file:', err);
    return;
  }
  console.log('File has been written.');
});

 

ข้อดีของ Node.js I/O

  • รองรับ asynchronous ทำให้ไม่บล็อก Event Loop
  • มี ecosystem ขนาดใหญ่ เช่น fs-extra สำหรับฟังก์ชันเพิ่มเติม
  • เขียนโค้ดง่ายและยืดหยุ่น

 

ข้อจำกัด

  • การจัดการไฟล์ขนาดใหญ่ต้องระวัง memory usage
  • Async code อาจซับซ้อนสำหรับผู้เริ่มต้น

 

I/O ใน Go

 

Go มี package os และ io/ioutil / io สำหรับจัดการไฟล์และ I/O

 

การอ่านไฟล์แบบง่าย

package main

import (
    "fmt"
    "io/ioutil"
    "log"
)

func main() {
    data, err := ioutil.ReadFile("example.txt")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("File content:", string(data))
}

 

การเขียนไฟล์

package main

import (
    "io/ioutil"
    "log"
)

func main() {
    content := []byte("Hello, Go!")
    err := ioutil.WriteFile("output.txt", content, 0644)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("File has been written.")
}

 

ข้อดีของ Go I/O

  • Type-safe และ error handling ชัดเจน
  • รองรับการจัดการไฟล์ขนาดใหญ่และ concurrent I/O ได้ดี
  • Built-in library ครบถ้วนสำหรับ filesystem

 

ข้อจำกัด

  • Syntax อาจ verbose สำหรับงานง่าย ๆ
  • ต้องจัดการ error ทุกครั้ง ไม่สามารถ ignore ได้

 

แนวทางปฏิบัติที่เหมาะสม

 

  1. จัดการ error ทุกครั้ง
    • JavaScript: ใช้ try/catch หรือ callback error
    • Go: ตรวจสอบ err หลังทุก I/O operation
  2. เลือก synchronous หรือ asynchronous ให้เหมาะสม
    • Node.js: ใช้ async/await หรือ callback หากไม่ต้องการบล็อก server
    • Go: ใช้ goroutine หรือ channel สำหรับ concurrent I/O
  3. ระวังไฟล์ขนาดใหญ่
    • ใช้ streaming หรือ buffered read/write แทนการโหลดทั้งหมดเข้าหน่วยความจำ
  4. ตั้งค่า permissions อย่างเหมาะสม
    • Go: 0644, 0755 สำหรับการเขียนไฟล์
    • Node.js: ตั้งค่า mode ใน writeFile

 


 

สรุปเปรียบเทียบ

 

FeatureJavaScript (Node.js)Go
Libraryfs, fs-extraos, io/ioutil, bufio
Async supportPromise, callback, async/awaitGoroutines + channels
Error handlingtry/catch, callback errorreturn error (type-safe)
Large filesStreaming recommendedbufio, streaming
ConcurrencyNon-blocking asyncConcurrent goroutines

 

คำแนะนำ:

  • สำหรับ web server / event-driven I/O ใช้ Node.js จะยืดหยุ่นและ async ง่าย
  • สำหรับ backend service / concurrent I/O / performance-critical ใช้ Go จะมั่นใจและเร็วกว่า

 

ตอนต่อไป

 

ใน EP.22 ของซีรีส์ JS2GO เราจะพาคุณไปเรียนรู้ การทำงานกับ JSON: JavaScript กับ Go ต่างกันอย่างไร? พร้อมตัวอย่างโค้ด JSON parsing, serialization และแนวทางปฏิบัติที่เหมาะสม เพื่อให้คุณสามารถอ่าน เขียน และจัดการ JSON ได้อย่างมีประสิทธิภาพ

 

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