Go File

news/2024/7/3 9:34:42 标签: golang, 开发语言, 后端

这里写目录标题

  • 1. Go File
    • 1.1. 将 string 转换为 io.Reader 类型
    • 1.2. golang 如何按行读取文本
      • 1.2.1. bufio.Reader 和 bufio.Scanner 的关系

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))

golang__31">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 是后开发的模块, 功能更强大, 使用更方便。


http://www.niftyadmin.cn/n/1621136.html

相关文章

10秒快速掌握ScheduledExecutorService 中的 scheduleWithFixedDelay() 和 scheduleFixedRate() 区别

scheduleWithFixedDelay: 不管线程任务的执行时间的,每次都要把任务执行完成后再延迟固定时间后再执行下一次。 scheduleFixedRate: 是以固定频率来执行线程任务,固定频率的含义就是可能设定的固定时间不足以完成线程任务&#x…

MySQL 5.7 用户与日志管理

说明:数据库是信息系统中非常重要的一个环节,合理高效地对它进行管理是很重要的工作。通常是由总管理员创建不同的管理账户,然后分配不同的操作权限,把这些账户交给相应的管理人员使用。由于日志文件是掌握数据库运行状态的重要参…

Podman 容器 pod 管理工具

这里写目录标题1. Podman 容器 pod 管理工具1.1. 什么是 Podman1.1.1. Roadmap1.2. Podman 历史1.2.1. 缘起1.2.1.1. 鸿蒙1.2.1.2. 创世1.2.2. 纷争1.2.2.1. 发展1.2.2.2. 野心1.2.2.3. 冲突1.2.2.4. 成败1. Podman 容器 pod 管理工具 1.1. 什么是 Podman Podman 是 Libpod 的…

java线上服务器jvm内存泄漏的一次踩坑(OutOfMemoryError)

前几天线上一台游戏服务器发生内存泄漏,cpu彪的很高,老板的脾气像cpu一样,是不是过来询问问题排查怎么样了。。。 因为线上服务器启动的时候,加了- XX: HeapDumpOnOutOfMemoryError ,发现服务器项目目录下…

游戏服务器生成全局唯一ID的几种方法

在服务器系统开发时,为了适应数据大并发的请求,我们往往需要对数据进行异步存储,特别是在做分布式系统时,这个时候就不能等待插入数据库返回了取自动id了,而是需要在插入数据库之前生成一个全局的唯一id,使…

一个小白的测试环境docker化之路

本文来自网易云社区 作者:叶子 学习docker搭建测试环境断断续续也有三个多月了,希望记录一下这个过程。常言道,总结过去,展望未来嘛~文章浅显,还望各位大神路过轻拍。 按照国际惯例,先说一下背景&#xff1…

Linux cpu负载和cpu利用率的区别

在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行)。 一、“load average” 含义: "load average",它的意思是"系统的平均负荷",里面有三个数字,我们可以从中…

Moby Project

这里写目录标题1. Moby Project1.1. 什么是 Moby Project1. Moby Project https://github.com/moby/mobyhttps://mobyproject.org/projects/ 1.1. 什么是 Moby Project Docker 公司决定将软件产品 “Docker” 和开源项目 “Docker” 区分开来。Moby Project 项目将作为开源项…