go pkg

时间:2023-03-09 00:56:13
go pkg

fmt

Scanln用来读取输入数据

示例:

package main                                                                                                                          

import (
"fmt"
"os"
"time"
) func main() {
out := os.Stdout
var d0, d1, d2, d3 string for {
//要读取完整的一行数据, 空格分隔的每个串被一次写入到参数中, 第一个返回值是读取的参数数目,第二个返回值是错误信息
nd, err := fmt.Scanln(&d0, &d1, &d2, &d3)
if err == nil && nd != {
fmt.Fprintf(out, "d0:%s d1:%s d2:%s d3:%s", d0, d1, d2, d3)
fmt.Fprintf(out, "len:%d\n", len(d3))
fmt.Fprintf(out, "num:%d\n", nd)
} else {
fmt.Fprintf(out, "num:%d err:%v\n", nd, err)
}
time.Sleep(time.Second)
}
}

输出:

#1,如果输入的参数个数为3个
a aa aaa
输出:
nd: err:unexpected newline
#2,如果输入的参数个数为4个
a aa aaa aaaa
输出:
d0:a d1:aa d2:aaa d3:aaaalen:
num:
#,如果输入的参数个数为5个
a aa aaa aaaa aaaaa
输出:
num: err:expected newline
num: err:unexpected newline

fmt.Fprintf(out)可以用fmt.Println()替代

bufio

//生成一个新的reader
func NewReader(rd io.Reader) *Reader
//生成一个新的reader,size为该reader的最短buffer长度
func NewReaderSize(rd io.Reader, size int) *Reader
//返回buffer中未被读取的长度
func (b *Reader) Buffered() int
//skip掉buffer,长度为n字节
func (b *Reader) Discard(n int) (discarded int, err error)
//返回next n 字节数据
func (b *Reader) Peek(n int) ([]byte, error)
//读取buffer的数据,读取完毕或者读取p长度的字节
func (b *Reader) Read(p []byte) (n int, err error)
//从buffer中读取一个字节
func (b *Reader) ReadByte() (c byte, err error)
//从buffer中读取若干字节,到delim截止,返回包含delim
func (b *Reader) ReadBytes(delim byte) (line []byte, err error)
//读取一行,\n结尾
func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)
//读取一个utf编码字,可能1个字节,也可能3个字节
func (b *Reader) ReadRune() (r rune, size int, err error)
//读取一段数据,delim截止,返回为[]byte类型
func (b *Reader) ReadSlice(delim byte) (line []byte, err error)
//读取一段数据,delim截止,返回string类型
func (b *Reader) ReadString(delim byte) (line string, err error)
//抛弃当前buffer的所有数据,并且重置当前值为新reader r,同时重置其它信息
func (b *Reader) Reset(r io.Reader)
//回退一个byte,回退不包含\
func (b *Reader) UnreadByte() error
//回退一个utf编码字,包含\
func (b *Reader) UnreadRune() error
//reader写入到writer中,类似于重新向的概念,需要每次
func (b *Reader) WriteTo(w io.Writer) (n int64, err error)