How do I encode a struct to/from CSV in Go?

In Go, encoding a struct to CSV format and decoding it back can be accomplished using the built-in `encoding/csv` package. Below is an example demonstrating how to perform these operations.

Encoding a Struct to CSV

package main

import (
    "encoding/csv"
    "os"
)

type Employee struct {
    Name   string
    Age    int
    Email  string
}

func main() {
    employees := []Employee{
        {"Alice", 30, "alice@example.com"},
        {"Bob", 25, "bob@example.com"},
    }

    file, err := os.Create("employees.csv")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    writer := csv.NewWriter(file)
    defer writer.Flush()

    // Write header
    err = writer.Write([]string{"Name", "Age", "Email"})
    if err != nil {
        panic(err)
    }

    // Write records
    for _, emp := range employees {
        err := writer.Write([]string{emp.Name, string(emp.Age), emp.Email})
        if err != nil {
            panic(err)
        }
    }
}

Decoding CSV to a Struct

package main

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

type Employee struct {
    Name   string
    Age    int
    Email  string
}

func main() {
    file, err := os.Open("employees.csv")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    reader := csv.NewReader(file)
    records, err := reader.ReadAll()
    if err != nil {
        panic(err)
    }

    var employees []Employee
    for _, record := range records[1:] { // Skip header
        age, _ := strconv.Atoi(record[1])
        emp := Employee{Name: record[0], Age: age, Email: record[2]}
        employees = append(employees, emp)
    }
}

Go CSV encoding decoding struct coding