Go Program for CSV Reader

Go Program for CSV Reader

CSV means comma separated values and it is one of the most common format to import and export in spreadsheets and databases.

encoding/csv module has the functionalities to read or write the CSV format data.

Let us consider example csv file ‘test-file.csv’ and has the below content.

id,name,class                                                                   
1,student1,VII                                                                  
2,student2,XI                                                                   
3,student3,VIII 

This Go program is used to read the existing csv file and provides the list of Student objects to consume in the Go programming.

package main            

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

                                                                                
func main() {             
    // Create struct to hold the CSV row data                                                      
    type Student struct {                                                       
        Id string                                                               
        Name string                                                             
        Class string                                                            
    }                                                                 

    // Open csv file using Open function importing os module          
    csvFile, err := os.Open("test-file.csv")                                    
    if err!=nil {                                                               
        fmt.Println(err)                                                        
    }                                                                           
    defer csvFile.Close()                                         

    // Create CSV reader              
    csvReader := csv.NewReader(csvFile)                                         
    // Specify number of columns per row
    csvReader.FieldsPerRecord = 3                      
    // Specify delimiter                         
    csvReader.Comma = ','                                                      
                                     

    // Read all the csv rows as csvData object     
    csvData, err := csvReader.ReadAll()                                         
    if err != nil {                                                             
        fmt.Println(err)                                                        
        os.Exit(1)                                                              
    }                                                                           
                                                   
    var stu Student                                                             
    var students []Student                                                      

     // Parses csvData object and create array of Student objects     
    for _, row := range csvData {                                               
        stu.Id = row[0]                                                         
        stu.Name = row[1]                                                       
        stu.Class = row[2]                                                      
        students = append(students, stu)                                        
    }                                            

    // Prints the data                               
    fmt.Println("All Students")                                                 
    fmt.Println(students)              
} 

Output:
$ go build csv-reader.go
$ ./csv-reader
All Students
[{id name class} {1 student1 VII} {2 student2 XII} {3 student3 VIII}]