Golang中各输入输出处理的区别

160 阅读2分钟

在Go语言中,输入输出处理是程序的重要组成部分。本次将介绍Go语言中的输入输出处理模块,并解释io、ioutil、bufio和strings.NewReader()之间的差异和使用方法。

一、io模块

io模块是Go语言中处理输入输出的基本模块。它提供了一些基本的输入输出函数,例如Write、Read、Copy等,用于处理字节流。io模块可以用于处理各种类型的输入输出,例如文件、网络连接、内存数据等。

二、ioutil模块

ioutil模块是Go语言中处理高级输入输出的模块。它提供了一些高级的输入输出函数,例如ReadAll、ReadFile、WriteFile等,用于处理更加复杂的和常见的输入输出操作。ioutil模块可以在标准输入输出、文件、网络连接等地方使用。

PS:感觉io是ioutil的父类。

三、bufio模块

bufio模块提供了一些缓冲的输入输出函数。它可以在标准输入输出、文件、网络连接等地方使用。bufio模块提供了一些缓冲区,可以缓存数据,减少I/O操作的次数,提高性能。

    input := bufio.NewReader(os.Stdin)
    strnum, err := input.ReadString('\n')
    if err != nil {  
        fmt.Printf("error", err)  
    }  
    strnum = strings.TrimSuffix(strnum, "\r\n")
    

这里用“\r\n”的原因是在Windows下,回车会认为是“\r\n”

四、strings.NewReader()

strings.NewReader()函数是Go语言中strings包提供的一个函数,返回一个*strings.Reader类型的指针。strings.Reader类型实现了一个从字符串读取数据的读取器接口,可以通过该接口进行逐字符或逐字节的读取操作。

使用strings.NewReader()函数可以创建一个新的strings.Reader对象,用于从字符串中读取数据。例如:

	str := "Hello, world!"  

	reader := strings.NewReader(str)

在上面的代码中,我们使用strings.NewReader()函数将字符串"Hello, world!"转换为一个strings.Reader对象reader。然后,我们可以使用reader来读取该字符串中的数据,例如使用reader.Read()方法读取一个字符,或使用reader.ReadString('o')方法读取所有包含字符'o'的字符序列。

说白了也是转换为字节流

五、选择合适的模块

根据具体需求选择使用io、ioutil、bufio和strings.NewReader()模块。如果需要处理基本的输入输出操作,可以使用io模块;如果需要处理更加复杂和常见的输入输出操作,可以使用ioutil模块;如果需要处理带缓冲的输入输出操作并提高性能,可以使用bufio模块;如果需要从字符串中读取数据,可以使用strings.NewReader()函数创建一个strings.Reader对象。

六、总结

在本篇文章中,我们介绍了Go语言中的输入输出处理模块,并解释了io、ioutil、bufio和strings.NewReader()之间的差异和使用方法。根据具体需求选择使用相应的模块,可以方便地进行输入输出处理。同时,使用适当的模块还可以提高程序的性能和效率。