GoでCSVファイルを読む 質問する

GoでCSVファイルを読む 質問する

以下は CSV ファイルを読み取るコード スニペットです。

func parseLocation(file string) (map[string]Point, error) {
    f, err := os.Open(file)
    defer f.Close()
    if err != nil {
        return nil, err
    }
    lines, err := csv.NewReader(f).ReadAll()
    if err != nil {
        return nil, err
    }
    locations := make(map[string]Point)
    for _, line := range lines {
        name := line[0]
        lat, laterr := strconv.ParseFloat(line[1], 64)
        if laterr != nil {
            return nil, laterr
        }
        lon, lonerr := strconv.ParseFloat(line[2], 64)
        if lonerr != nil {
            return nil, lonerr
        }
        locations[name] = Point{lat, lon}
    }
    return locations, nil
}

このコードの読みやすさを改善する方法はありますか? if と nil のノイズ。

ベストアンサー1

Go には現在、このための csv パッケージがあります。 ですencoding/csv。ドキュメントはここで見つかります:csv は、以下の例のようにエンコードされます。

ドキュメントには良い例がいくつかあります。以下は、csv ファイルを読み取ってそのレコードを返すために作成したヘルパー メソッドです。

package main

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

func readCsvFile(filePath string) [][]string {
    f, err := os.Open(filePath)
    if err != nil {
        log.Fatal("Unable to read input file " + filePath, err)
    }
    defer f.Close()

    csvReader := csv.NewReader(f)
    records, err := csvReader.ReadAll()
    if err != nil {
        log.Fatal("Unable to parse file as CSV for " + filePath, err)
    }

    return records
}

func main() {
    records := readCsvFile("../tasks.csv")
    fmt.Println(records)
}

おすすめ記事