失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【Go】Go基础(十):文件读写

【Go】Go基础(十):文件读写

时间:2020-04-14 06:25:05

相关推荐

【Go】Go基础(十):文件读写

一、读写数据
1、读取用户的输入

使用fmt 包提供的 Scan 和 Sscan 开头的函数;

* Scanln 扫描来自标准输入的文本,将空格分隔的值依次存放到后续的参数内,直到碰到换行。* Scanf 与其类似,除了 Scanf 的第一个参数用作格式字符串,用来决定如何读取。* Sscan 和以 Sscan 开头的函数则是从字符串读取,除此之外,与 Scanf 相同。

bufio 包提供的缓冲读取(buffered reader)来读取数据

inputReader := bufio.NewReader(os.Stdin)input, err := inputReader.ReadString('\n')

2、读文件

循环读写每一行:

inputFile, inputError := os.Open("input.dat")defer inputFile.Close()inputReader := bufio.NewReader(inputFile)for {inputString, readerError := inputReader.ReadString('\n')fmt.Printf("The input was: %s", inputString)if readerError == io.EOF {return}}

说明:

* inputFile 是 *os.File 类型的,表示一个打开文件的描述符(文件句柄);

读取整个文件到一个字符串中:

buf, err := ioutil.ReadFile(products.txt)fmt.Printf("%s\n", string(buf))err = ioutil.WriteFile(products_copy.txt, buf, 0644) // oct, not hex

读取指定大小内容到缓冲

buf := make([]byte, 1024)n, err := inputReader.Read(buf)

按列读取文件中的数据

如果数据是按列排列并用空格分隔的,你可以使用 fmt 包提供的以 FScan 开头的一系列函数来读取他们;

file, err := os.Open("products2.txt")var col1, col2, col3 []stringfor {var v1, v2, v3 string_, err := fmt.Fscanln(file, &v1, &v2, &v3)// scans until newlineif err != nil {break}col1 = append(col1, v1)col2 = append(col2, v2)col3 = append(col3, v3)}

compress包:读取压缩文件

3、写文件:

outputFile, outputError := os.OpenFile("output.dat", os.O_WRONLY|os.O_CREATE, 0666)defer outputFile.Close()outputWriter := bufio.NewWriter(outputFile)outputString := "hello world!\n"for i:=0; i<10; i++ {outputWriter.WriteString(outputString)}outputWriter.Flush()

标志:

os.O_RDONLY:只读os.O_WRONLY:只写os.O_CREATE:创建:如果指定文件不存在,就创建该文件。os.O_TRUNC:截断:如果指定文件已存在,就将该文件的长度截为0。

4、文件拷贝:io.Copy

src, err := os.Open(srcName)defer src.Close()dst, err := os.Create(dstName)defer dst.Close()io.Copy(dst, src)

5、 从命令行读取参数

os.Args:用来处理一些基本的命令行参数,os.Args[0] 放的是程序本身的名字,os.Args[1:]用来保存变量;

flag 包:

在 flag 包中有一个 Flag 被定义成一个含有如下字段的结构体:

type Flag struct {Namestring // name as it appears on command lineUsage string // help messageValue Value // value as setDefValue string // default value (as text); for usage message}

下面的程序 echo.go 模拟了 Unix 的 echo 功能:

package mainimport ("flag" // command line option parser"os")var NewLine = flag.Bool("n", false, "print newline") // echo -n flag, of type *boolconst (Space = " "Newline = "\n")func main() {flag.PrintDefaults()flag.Parse() // Scans the arg list and sets up flagsvar s string = ""for i := 0; i < flag.NArg(); i++ {if i > 0 {s += " "if *NewLine {// -n is parsed, flag becomes trues += Newline}}s += flag.Arg(i)}os.Stdout.WriteString(s)}

相关函数:

* flag.PrintDefaults() 打印 flag 的使用帮助信息* flag.Parse() 扫描参数列表* flag.Arg(i) 表示第i个参数,注意:flag.Arg(0) 就是第一个真实的 flag,而不是像 os.Args(0) 放置程序的名字* flag.Narg() 返回参数的数量* flag.Bool flag.Int(),flag.Float64(),flag.String(),设置命令行参数

6、 JSON 数据格式

常用函数:

import "encoding/json"//引入包func Marshal(v interface{}) ([]byte, error)//序列化json.MarshalforHTML()//web 应用中最好使用该函数,将对数据执行HTML转码,可以被安全地嵌在 HTML <script> 标签中func NewEncoder(w io.Writer) *Encoder//将数据对象 v 的json编码写入 io.Writer w 中func Unmarshal(data []byte, v interface{}) error//反序列化

JSON 与 Go 类型对应如下:

bool 对应 JSON 的 booleansfloat64 对应 JSON 的 numbersstring 对应 JSON 的 stringsnil 对应 JSON 的 null

7、Go 中的密码学

hash 包:实现了 adler32、crc32、crc64 和 fnv 校验;

crypto 包:实现了其它的 hash 算法,比如 md4、md5、sha1 等。以及完整地实现了 aes、blowfish、rc4、rsa、xtea 等加密算法。

如果觉得《【Go】Go基础(十):文件读写》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
go语言之文件读写

go语言之文件读写

2022-10-27

go按行读写文件

go按行读写文件

2021-09-28

go-文件读写-db

go-文件读写-db

2022-01-27

002-Go通过ioutil 读写文件

002-Go通过ioutil 读写文件

2022-06-02