Go 语言

Go 语言教程 Go 语言环境安装 Go 语言结构 Go 语言基础语法 Go 语言数据类型 Go 语言变量 Go 语言常量 Go 语言运算符 Go 语言条件语句 Go 语言 if 语句 Go 语言 if...else 语句 Go 语言 if 语句嵌套 Go 语言 switch 语句 Go 语言 select 语句 Go 语言循环语句 Go 语言 for 循环 Go 语言循环嵌套 Go 语言 break 语句 Go 语言 continue 语句 Go 语言 goto 语句 Go 语言函数 Go 语言函数值传递值 Go 语言函数引用传递值 Go 语言函数作为值 Go 语言函数闭包 Go 语言函数方法 Go 语言变量作用域 Go 语言数组 Go 语言多维数组 Go 语言向函数传递数组 Go 语言指针 Go 语言指针数组 Go 语言指向指针的指针 Go 语言指针作为函数参数 Go 语言结构体 Go 语言切片(Slice) Go 语言范围(Range) Go 语言Map(集合) Go 语言递归函数 Go 语言类型转换 Go 语言接口 Go 错误处理 Go 语言开发工具Go 语言标准库

Go 语言标准库


package csv

import "encoding/csv"

csv读写逗号分隔值(csv)的文件。

一个csv分拣包含零到多条记录,每条记录一到多个字段。每个记录用换行符分隔。最后一条记录后面可以有换行符,也可以没有。

field1,field2,field3

空白视为字段的一部分。

换行符前面的回车符会悄悄的被删掉。

忽略空行。只有空白的行(除了末尾换行符之外)不视为空行。

以双引号"开始和结束的字段成为受引字段,其开始和结束的引号不属于字段。

资源:

normal string,"quoted-field"

产生如下字段:

{`normal string`, `quoted-field`}

受引字段内部,如果有两个连续的双引号,则视为一个单纯的双引号字符:

"the ""word"" is true","a ""quoted-field"""

生成:

{`the "word" is true`, `a "quoted-field"`}

受引字段里可以包含换行和逗号:

"Multi-line
field","comma is ,"

生成:

{`Multi-line
field`, `comma is ,`}

Go语言标准库 >>


  • Variables
  • type ParseError
  • type Reader
  • type Writer
  • Variables

    var (
        ErrTrailingComma = errors.New("extra delimiter at end of line") // 不再使用
        ErrBareQuote     = errors.New("bare \" in non-quoted-field")
        ErrQuote         = errors.New("extraneous \" in field")
        ErrFieldCount    = errors.New("wrong number of fields in line")
    )

    这些都是PaserError.Err字段可能的值。

    type ParseError

    type ParseError struct {
        Line   int   // 出错的行号
        Column int   // 出错的列号
        Err    error // 具体的错误
    }

    当解析错误时返回ParseError,第一个行为1,第一列为0。

    func (*ParseError) Error

    func (e *ParseError) Error() string

    type Reader

    type Reader struct {
        Comma            rune // 字段分隔符(NewReader将之设为',')
        Comment          rune // 一行开始位置的注释标识符
        FieldsPerRecord  int  // 每条记录期望的字段数
        LazyQuotes       bool // 允许懒引号
        TrailingComma    bool // 忽略,出于后端兼容性而保留
        TrimLeadingSpace bool // 去除前导的空白
        // 内含隐藏或非导出字段
    }

    Reader从csv编码的文件中读取记录。

    NewReader返回的*Reader期望输入符合RFC 4180。在首次调用Read或者ReadAll之前可以设定导出字段的细节。

    Comma是字段分隔符,默认为','。Comment如果不是0,则表示注释标识符,以Comment开始的行会被忽略。如果FieldsPerRecord大于0,Read方法要求每条记录都有给定数目的字段。如果FieldsPerRecord等于0,Read方法会将其设为第一条记录的字段数,因此其余的记录必须有同样数目的字段。如果FieldsPerRecord小于0,不会检查字段数,允许记录有不同数量的字段。如果LazyQuotes为真,引号可以出现在非受引字段里,不连续两个的引号可以出现在受引字段里。如果TrimLeadingSpace为真,字段前导的空白会忽略掉。

    func NewReader

    func NewReader(r io.Reader) *Reader

    NewReader函数返回一个从r读取的*Reader。

    func (*Reader) Read

    func (r *Reader) Read() (record []string, err error)

    Read从r读取一条记录,返回值record是字符串的切片,每个字符串代表一个字段。

    func (*Reader) ReadAll

    func (r *Reader) ReadAll() (records [][]string, err error)

    ReadAll从r中读取所有剩余的记录,每个记录都是字段的切片,成功的调用返回值err为nil而不是EOF。因为ReadAll方法定义为读取直到文件结尾,因此它不会将文件结尾视为应该报告的错误。

    type Writer

    type Writer struct {
        Comma   rune // 字段分隔符(NewWriter将之设为',')
        UseCRLF bool // 如为真,则换行时使用\r\n
        // 内含隐藏或非导出字段
    }

    Writer类型的值将记录写入一个csv编码的文件。

    NewWriter返回的*Writer写入记录时,以换行结束记录,用','分隔字段。在第一次调用Write或WriteAll之前,可以设置导出字段的细节。

    Comma是字段分隔符。如果UseCRLF为真,Writer在每条记录结束时用\r\n代替\n。

    func NewWriter

    func NewWriter(w io.Writer) *Writer

    NewWriter返回一个写入w的*Writer。

    func (*Writer) Write

    func (w *Writer) Write(record []string) (err error)

    向w中写入一条记录,会自行添加必需的引号。记录是字符串切片,每个字符串代表一个字段。

    func (*Writer) WriteAll

    func (w *Writer) WriteAll(records [][]string) (err error)

    WriteAll方法使用Write方法向w写入多条记录,并在最后调用Flush方法清空缓存。

    func (*Writer) Flush

    func (w *Writer) Flush()

    将缓存中的数据写入底层的io.Writer。要检查Flush时是否发生错误的话,应调用Error方法。

    func (*Writer) Error

    func (w *Writer) Error() error

    Error返回在之前的Write方法和Flush方法执行时出现的任何错误。