อ่านไฟล์ด้วย os และ bufio
เปิด อ่านบรรทัด และปิดไฟล์อย่างปลอดภัย
อ่านไฟล์ด้วย os และ bufio เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
os.ReadFile
os.ReadFile (Go 1.16+) อ่านไฟล์ทั้งหมดลงในสไลซ์ของไบต์ด้วยการเรียกเพียงครั้งเดียว เรียบง่ายและเป็นสำนวนมาตรฐานสำหรับไฟล์ขนาดเล็ก
data, err := os.ReadFile("config.json")
if err != nil { log.Fatal(err) }
fmt.Println(string(data))os.Open และการปิดด้วยตนเอง
หากต้องการควบคุมมากขึ้น ให้เปิดไฟล์ด้วย os.Open (อ่านอย่างเดียว) และปิดไฟล์ด้วย defer:
f, err := os.Open("data.txt")
if err != nil { return err }
defer f.Close()การอ่านลงในบัฟเฟอร์
อ่านไบต์เป็นส่วน ๆ ด้วย f.Read(buf) ซึ่งคืนค่าจำนวนไบต์ที่อ่านและ io.EOF เมื่อถึงจุดสิ้นสุดของไฟล์
buf := make([]byte, 1024)
n, err := f.Read(buf)
if err != nil && err != io.EOF { return err }
fmt.Println(string(buf[:n]))bufio.NewReader
ห่อไฟล์ด้วย bufio.Reader เพื่อบัฟเฟอร์การอ่านและลดการเรียกระบบ เมธอดต่าง ๆ ได้แก่ ReadString, ReadLine และ ReadByte
reader := bufio.NewReader(f)
line, err := reader.ReadString('\n')การอ่านทีละบรรทัดด้วย bufio.Scanner
bufio.NewScanner เป็นวิธีมาตรฐานของ Go สำหรับอ่านไฟล์ข้อความทีละบรรทัด ฟังก์ชันแบ่งส่วนเริ่มต้นคือ ScanLines
scanner := bufio.NewScanner(f)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil { return err }บัฟเฟอร์แบบกำหนดเองของตัวสแกน
บัฟเฟอร์เริ่มต้นของตัวสแกนมีขนาด 64 KiB หากไฟล์มีบรรทัดยาวมาก ให้เพิ่มขนาดบัฟเฟอร์ด้วย scanner.Buffer
buf := make([]byte, 1024*1024)
scanner.Buffer(buf, len(buf))io.ReadAll
io.ReadAll อ่านจาก io.Reader ใด ๆ จนถึง EOF แล้วคืนค่าเป็นไบต์ มีประโยชน์สำหรับการอ่านจากการเชื่อมต่อเครือข่าย เนื้อหาการตอบกลับ หรือไฟล์ที่ห่ออยู่ในตัวอ่าน
data, err := io.ReadAll(f)การสแกนคำและไบต์
แทนที่ฟังก์ชันแบ่งส่วนของตัวสแกนเพื่อสแกนคำ (bufio.ScanWords) หรือไบต์แต่ละตัว (bufio.ScanBytes)
scanner.Split(bufio.ScanWords)
for scanner.Scan() {
fmt.Println(scanner.Text())
}การอ่านข้อความที่มีโครงสร้าง
หลังจากอ่านทีละบรรทัดแล้ว ให้ใช้ strings.Fields หรือ strings.Split เพื่อแยกวิเคราะห์คอลัมน์:
for scanner.Scan() {
fields := strings.Fields(scanner.Text())
// fields[0], fields[1], ...
}ข้อผิดพลาดในการอ่านไฟล์
ตรวจสอบ Err() ของตัวสแกนหลังจบวนรอบการสแกนเสมอ เพราะจะคืนค่าข้อผิดพลาดแรกที่ไม่ใช่ EOF วนรอบที่จบลงตามปกติโดยไม่ได้สแกนแม้แต่บรรทัดเดียวก็อาจพบข้อผิดพลาดได้
การอ่านอินพุตมาตรฐานที่ระบุชื่อ
ใช้ os.Stdin ได้ทุกที่ที่รับ io.Reader วิธีนี้ทำให้เครื่องมือ CLI ทำงานได้ทั้งกับอาร์กิวเมนต์ไฟล์และอินพุตที่ส่งผ่านไพป์
scanner := bufio.NewScanner(os.Stdin)ตรวจสอบความเข้าใจอย่างรวดเร็ว
ชนิดใดของ bufio ที่เป็นวิธีมาตรฐานของ Go สำหรับอ่านไฟล์ข้อความทีละบรรทัด?
สรุป: การอ่านไฟล์
ประเด็นสำคัญ:
- os.ReadFile: อ่านไฟล์ขนาดเล็กทั้งหมดด้วยการเรียกครั้งเดียว
- bufio.Scanner: อ่านทีละบรรทัด และตรวจสอบ Err() หลังจบวนรอบ
- bufio.Reader: บัฟเฟอร์การอ่านเพื่อลดการเรียกระบบ
- io.ReadAll: อ่าน io.Reader ใด ๆ จนเสร็จสมบูรณ์
คำถามที่พบบ่อย
บทเรียน “อ่านไฟล์ด้วย os และ bufio” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “อ่านไฟล์ด้วย os และ bufio” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “อ่านไฟล์ด้วย os และ bufio”
เปิด อ่านบรรทัด และปิดไฟล์อย่างปลอดภัย คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “อ่านไฟล์ด้วย os และ bufio” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- อ่านไฟล์ด้วย os และ bufio
- การเขียนไฟล์และไฟล์ชั่วคราว
- การเข้ารหัสและถอดรหัส JSON
- JSON และ CSV แบบสตรีม