12/04/2026 18:17น.

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 ได้
แนวทางปฏิบัติที่เหมาะสม
- จัดการ error ทุกครั้ง
- JavaScript: ใช้
try/catchหรือ callback error - Go: ตรวจสอบ
errหลังทุก I/O operation
- JavaScript: ใช้
- เลือก synchronous หรือ asynchronous ให้เหมาะสม
- Node.js: ใช้ async/await หรือ callback หากไม่ต้องการบล็อก server
- Go: ใช้ goroutine หรือ channel สำหรับ concurrent I/O
- ระวังไฟล์ขนาดใหญ่
- ใช้ streaming หรือ buffered read/write แทนการโหลดทั้งหมดเข้าหน่วยความจำ
- ตั้งค่า permissions อย่างเหมาะสม
- Go: 0644, 0755 สำหรับการเขียนไฟล์
- Node.js: ตั้งค่า mode ใน
writeFile
สรุปเปรียบเทียบ
| Feature | JavaScript (Node.js) | Go |
|---|---|---|
| Library | fs, fs-extra | os, io/ioutil, bufio |
| Async support | Promise, callback, async/await | Goroutines + channels |
| Error handling | try/catch, callback error | return error (type-safe) |
| Large files | Streaming recommended | bufio, streaming |
| Concurrency | Non-blocking async | Concurrent 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/