当前位置: 首页 > 工具软件 > go-torrent > 使用案例 >

Go File

单于翰飞
2023-12-01

1. Go File

1.1. 将 string 转换为 io.Reader 类型

在使用很多函数的时候需要传入 string 字符串 , 但是函数参数类型是 io.Reader, 这时候就需要将 string 转换为 Reader 类型

例如下面的:

strings.NewReader("aaaa")

NewReader 返回从读取的新 Reader。 它类似于 bytes.NewBufferString, 但效率更高且只读。

bytes.NewBuffer([]byte("aaaaa"))
bytes.NewBufferString("aaaa")
bytes.NewReader([]byte("aaaa"))

Buffer 是具有 Read 和 Write 方法的可变大小的字节缓冲区。 Buffer 的零值是可以使用的空缓冲区。

上面这俩都行

strings.NewReader(string(body))

1.2. golang 如何按行读取文本

golang 的库 bufio.Scanner 是非常方便用来处理文本文件。

下面的例子是按行读取文本文件。

package main

import (
    "os"
    "log"
    "fmt"
    "bufio"
)

func main() {
    err := HandleText("a.txt")
    if err != nil {
        panic(err)
    }
}

func HandleText(textfile string) error {
    file, err := os.Open(textfile)
    if err != nil {
        log.Printf("Cannot open text file: %s, err: [%v]", textfile, err)
        return err
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        line := scanner.Text()  // or
      //line := scanner.Bytes()

      //do_your_function(line)
        fmt.Printf("%s\n", line)
    }

    if err := scanner.Err(); err != nil {
        log.Printf("Cannot scanner text file: %s, err: [%v]", textfile, err)
        return err
    }

    return nil
}

1.2.1. bufio.Reader 和 bufio.Scanner 的关系

bufio.Reader 是 go 早期的版本也是用来处理文本, 使用起来有一些不方便, 例如需要处理行太长的问题, 而 bufio.Scanner 是 go1.1 中新增加的功能, 既然是新加的功能肯定是修正之前的不足, 在使用上更加方便, 比如就不用处理行太长的问题。

总之就是 bufio.Scanner 是后开发的模块, 功能更强大, 使用更方便。

 类似资料:

相关阅读

相关文章

相关问答