尝试将 csv 字符串封送到结构中

这是我的程序:


package main


import (

    "fmt"

    "log"


    "github.com/gocarina/gocsv"

)


// GeoAdresseCsv is a test structcd 

type GeoAdresseCsv struct {

    ID    int    `csv:"id"`

    IDBan string `csv:"id_ban"`

}


func main() {

    var adresseDB []GeoAdresseCsv

    stringCsv := `id;id_ban

    2908743;28009_0019_00008`


    err := gocsv.UnmarshalString(stringCsv, &adresseDB)

    if err != nil {

        log.Fatal(err)

    }

    fmt.Printf("%+v\n", adresseDB)

}

但是我得到的输出是:


[{用户名:0IDBan:}]


我应该如何正确地将我的csv字符串正确映射到我的结构?


明月笑刀无情
浏览 73回答 1
1回答

哈士奇WWW

虽然数据中的分隔符是 ,但包默认使用 。;,因此,我们需要将包配置为使用不同的分隔符。根据文档,这可以通过可自定义的CSV阅读器实现:gocsv.SetCSVReader(func(in io.Reader) gocsv.CSVReader {    r := csv.NewReader(in)    r.Comma = ';' // This is our separator now    return r})  这将配置包中的所有功能。您的代码应如下所示以包含更改:package mainimport (    "encoding/csv"    "fmt"    "io"    "log"    "github.com/gocarina/gocsv")// GeoAdresseCsv is a test structcdtype GeoAdresseCsv struct {    ID    int    `csv:"id"`    IDBan string `csv:"id_ban"`}func main() {    gocsv.SetCSVReader(func(in io.Reader) gocsv.CSVReader {        r := csv.NewReader(in)        r.Comma = ';' // This is our separator now        return r    })    var adresseDB []GeoAdresseCsv    stringCsv := `id;id_ban    2908743;28009_0019_00008`    err := gocsv.UnmarshalString(stringCsv, &adresseDB)    if err != nil {        log.Fatal(err)    }    fmt.Printf("%+v\n", adresseDB)}现在输出是预期值:[{ID:2908743 IDBan:28009_0019_00008}]您可以在此处在线运行它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go