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หรือReadAllcsv.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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ