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

encoding/csv

อ่านและเขียน CSV

encoding/csv เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

CSV คืออะไร

CSV (ค่าที่คั่นด้วยจุลภาค) ใช้จัดเก็บข้อมูลแบบตารางเป็นข้อความธรรมดา โดยมีหนึ่งระเบียนต่อบรรทัดและคั่นฟิลด์ด้วยจุลภาค แพ็กเกจ encoding/csv ของ Go ใช้อ่านและเขียนข้อมูลรูปแบบนี้

การอ่านจากสตริง

สร้างตัวอ่านจาก io.Reader ใดก็ได้ strings.NewReader จะห่อสตริงไว้เพื่อให้สาธิตได้โดยไม่ต้องใช้ไฟล์

package main

import (
	"encoding/csv"
	"fmt"
	"strings"
)

func main() {
	r := csv.NewReader(strings.NewReader("a,b,c"))
	rec, _ := r.Read()
	fmt.Println(rec)
}

การอ่านระเบียนทั้งหมด

ReadAll อ่านทุกแถวลงใน [][]string สไลซ์ด้านในแต่ละรายการคือฟิลด์ของระเบียนหนึ่งรายการ

package main

import (
	"encoding/csv"
	"fmt"
	"strings"
)

func main() {
	data := "name,age\nAnn,30\nBob,25"
	r := csv.NewReader(strings.NewReader(data))
	records, _ := r.ReadAll()
	fmt.Println(records)
}

การอ่านทีละแถว

สำหรับไฟล์ขนาดใหญ่ ให้อ่านทีละระเบียนด้วย Read เมธอดนี้จะคืนค่า io.EOF เมื่ออ่านเสร็จแล้ว

package main

import (
	"encoding/csv"
	"fmt"
	"io"
	"strings"
)

func main() {
	r := csv.NewReader(strings.NewReader("a,1\nb,2"))
	for {
		rec, err := r.Read()
		if err == io.EOF {
			break
		}
		fmt.Println(rec)
	}
}

การเข้าถึงฟิลด์

แต่ละระเบียนเป็นสไลซ์ของสตริง ใช้ดัชนีเข้าถึงสไลซ์เพื่ออ่านคอลัมน์

package main

import (
	"encoding/csv"
	"fmt"
	"strings"
)

func main() {
	r := csv.NewReader(strings.NewReader("Ann,30"))
	rec, _ := r.Read()
	fmt.Println("name:", rec[0], "age:", rec[1])
}

ตัวคั่นแบบกำหนดเอง

กำหนดค่า r.Comma เพื่อใช้ตัวคั่นแบบอื่น เช่น อัฒภาคหรือแท็บ

package main

import (
	"encoding/csv"
	"fmt"
	"strings"
)

func main() {
	r := csv.NewReader(strings.NewReader("a;b;c"))
	r.Comma = ';'
	rec, _ := r.Read()
	fmt.Println(rec)
}

การเขียน CSV

csv.NewWriter ใช้เขียนระเบียน เรียกใช้ Flush เพื่อส่งข้อมูลที่อยู่ในบัฟเฟอร์ออกไป

package main

import (
	"encoding/csv"
	"os"
)

func main() {
	w := csv.NewWriter(os.Stdout)
	w.Write([]string{"name", "age"})
	w.Write([]string{"Ann", "30"})
	w.Flush()
}

การเขียนหลายแถว

WriteAll เขียนข้อมูล [][]string ทั้งหมดในครั้งเดียวและล้างบัฟเฟอร์ให้อัตโนมัติ

package main

import (
	"encoding/csv"
	"os"
)

func main() {
	w := csv.NewWriter(os.Stdout)
	rows := [][]string{{"a", "1"}, {"b", "2"}}
	w.WriteAll(rows)
}

การใส่เครื่องหมายคำพูดอัตโนมัติ

ตัวเขียนจะใส่เครื่องหมายคำพูดให้ฟิลด์ที่มีจุลภาค เครื่องหมายคำพูด หรือบรรทัดใหม่ เพื่อให้ผลลัพธ์ยังคงเป็น CSV ที่ถูกต้อง

package main

import (
	"encoding/csv"
	"os"
)

func main() {
	w := csv.NewWriter(os.Stdout)
	w.Write([]string{"hello, world", "plain"})
	w.Flush()
}

อย่าลืม Flush

ตัวเขียนจะเก็บข้อมูลไว้ในบัฟเฟอร์ หากคุณลืมเรียกใช้ Flush (และไม่ได้ใช้ WriteAll) บางแถวอาจไม่ถูกเขียนเลย ควรล้างบัฟเฟอร์เสมอก่อนโปรแกรมจบการทำงาน

การจัดการข้อผิดพลาด

หลังจากล้างบัฟเฟอร์แล้ว ให้ตรวจสอบ w.Error() เพื่อจับข้อผิดพลาดในการเขียนที่เกิดขึ้นระหว่างการเก็บข้อมูลในบัฟเฟอร์

package main

import (
	"encoding/csv"
	"fmt"
	"os"
)

func main() {
	w := csv.NewWriter(os.Stdout)
	w.Write([]string{"x", "y"})
	w.Flush()
	fmt.Fprintln(os.Stderr, w.Error())
}

ตรวจสอบอย่างรวดเร็ว

ReadAll ของตัวอ่าน CSV จะคืนข้อมูลที่แยกวิเคราะห์แล้วในรูปแบบใด

สรุปทบทวน

encoding/csv:

  • csv.NewReader ร่วมกับ Read หรือ ReadAll
  • csv.NewWriter ร่วมกับ Write/WriteAll แล้วตามด้วย Flush
  • กำหนดค่า Comma สำหรับตัวคั่นแบบกำหนดเอง การใส่เครื่องหมายคำพูดทำโดยอัตโนมัติ

คำถามที่พบบ่อย

บทเรียน “encoding/csv” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “encoding/csv” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “encoding/csv”

อ่านและเขียน CSV คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “encoding/csv” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. ทบทวน encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob และการเข้ารหัสไบนารี
← กลับไปที่ Go Academy