为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
明月笑刀无情 2022-08-15 10:47:54
这是我的程序:package mainimport (    "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字符串正确映射到我的结构?
查看完整描述

1 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

虽然数据中的分隔符是 ,但包默认使用 。;,


因此,我们需要将包配置为使用不同的分隔符。根据文档,这可以通过可自定义的CSV阅读器实现:


gocsv.SetCSVReader(func(in io.Reader) gocsv.CSVReader {

    r := csv.NewReader(in)

    r.Comma = ';' // This is our separator now

    return r

})  

这将配置包中的所有功能。


您的代码应如下所示以包含更改:


package main


import (

    "encoding/csv"

    "fmt"

    "io"

    "log"


    "github.com/gocarina/gocsv"

)


// GeoAdresseCsv is a test structcd

type 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}]

您可以在此处在线运行它。


查看完整回答
反对 回复 2022-08-15
  • 1 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信