0Pricing
Go Academy · บทเรียน

อ่านไฟล์ด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. อ่านไฟล์ด้วย os และ bufio
  2. การเขียนไฟล์และไฟล์ชั่วคราว
  3. การเข้ารหัสและถอดรหัส JSON
  4. JSON และ CSV แบบสตรีม
← กลับไปที่ Go Academy