1、借助bufio实现按行读取内容

示例:

  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "fmt"
  6. "io"
  7. "os"
  8. )
  9.  
  10. func WriteFile(path string) {
  11. //打开文件,新建文件
  12. f, err := os.Create(path)
  13. if err != nil {
  14. fmt.Println("err = ", err)
  15. return
  16. }
  17.  
  18. //使用完毕,需要关闭文件
  19. defer f.Close()
  20.  
  21. var buf string
  22.  
  23. for i := 0; i < 10; i++ {
  24. //"i = 1\n", 这个字符串存储在buf中
  25. buf = fmt.Sprintf("i = %d\n", i)
  26. //fmt.Println("buf = ", buf)
  27.  
  28. n, err := f.WriteString(buf)
  29. if err != nil {
  30. fmt.Println("err = ", err)
  31. }
  32. fmt.Println("n = ", n)
  33. }
  34. }
  35.  
  36. func ReadFile(path string) {
  37. //打开文件
  38. f, err := os.Open(path)
  39. if err != nil {
  40. fmt.Println("err = ", err)
  41. return
  42. }
  43.  
  44. //关闭文件
  45. defer f.Close()
  46.  
  47. buf := make([]byte, 1024*2) //2k大小
  48.  
  49. //n代表从文件读取内容的长度
  50. n, err1 := f.Read(buf)
  51. if err1 != nil && err1 != io.EOF { //文件出错,同时没有到结尾
  52. fmt.Println("err1 = ", err1)
  53. return
  54. }
  55.  
  56. fmt.Println("buf = ", string(buf[:n]))
  57.  
  58. }
  59.  
  60. //每次读取一行
  61. func ReadFileLine(path string) {
  62. //打开文件
  63. f, err := os.Open(path)
  64. if err != nil {
  65. fmt.Println("err = ", err)
  66. return
  67. }
  68.  
  69. //关闭文件
  70. defer f.Close()
  71.  
  72. //新建一个缓冲区,把内容先放在缓冲区
  73. r := bufio.NewReader(f)
  74.  
  75. for {
  76. //遇到'\n'结束读取, 但是'\n'也读取进入
  77. buf, err := r.ReadBytes('\n')
  78. if err != nil {
  79. if err == io.EOF { //文件已经结束
  80. break
  81. }
  82. fmt.Println("err = ", err)
  83. }
  84.  
  85. fmt.Printf("buf = #%s#\n", string(buf))
  86. }
  87.  
  88. }
  89.  
  90. func main() {
  91. path := "./demo.txt"
  92.  
  93. //WriteFile(path)
  94. //ReadFile(path)
  95. ReadFileLine(path)
  96. }

执行结果:

  1. err1 = i = 0
  2.  
  3. i = 1
  4. i = 2
  5. i = 3
  6. i = 4
  7. i = 5
  8. i = 6
  9. i = 7
  10. i = 8
  11. i = 9

  

go语言之进阶篇借助bufio实现按行读取内容的更多相关文章

  1. go语言之进阶篇接口转换

    1.go语音之进阶篇 示例: package main import "fmt" type Humaner interface { //子集 sayhi() } type Pers ...

  2. go语言之进阶篇通过select实现斐波那契数列

    一.select作用 Go里面提供了一个关键字select,通过select可以监听channel上的数据流动. select的用法与switch语言非常类似,由select开始一个新的选择块,每个选 ...

  3. go语言之进阶篇创建goroutine协程

    1.goroutine是什么 goroutine是Go并行设计的核心.goroutine说到底其实就是协程,但是它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现 ...

  4. go语言之进阶篇并行和并发的区别与go语言并发优势

    1.并行和并发的概念 并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行. 并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在 ...

  5. go语言之进阶篇JSON处理

    一.JSON处理 JSON (JavaScript Object Notation)是一种比XML更轻量级的数据交换格式,在易于人们阅读和编写的同时,也易于程序解析和生成.尽管JSON是JavaScr ...

  6. go语言之进阶篇正则表达式

    正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具.虽然正则表达式比纯粹的文本匹配效率低,但是它却更灵活.按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出几乎任何你想要得到的字符 ...

  7. go语言之进阶篇方法面向过程和对象函数的区别

    1.方法 (method) 在面向对象编程中,一个对象其实也就是一个简单的值或者一个变量,在这个对象中会包含一些函数,这种带有接收者的函数,我们称为方法(method). 本质上,一个方法则是一个和特 ...

  8. go语言之进阶篇面向对象编程

    1.面向对象编程 对于面向对象编程的支持Go 语言设计得非常简洁而优雅.因为, Go语言并没有沿袭传统面向对象编程中的诸多概念,比如继承(不支持继承,尽管匿名字段的内存布局和行为类似继承,但它并不是继 ...

  9. Go语言之进阶篇操作redis

    1.windows安装redis 软件包下载地址: https://github.com/MicrosoftArchive/redis/releases 1.1.安装--->下一步---> ...

随机推荐

  1. Android-Kotlin在Fragment获取View

    Android-Kotlin在Fragment获取View Overview 在使用Fragment的时候,使用了ButterKnife 来获取View但是一直出错,后来就直接使用Kotlin的导入布 ...

  2. Java中实现多线程的两种方式之间的区别

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

  3. android的AsyncTask.get()方法会阻塞UI线程

    AsyncTask.get()方法, 是有阻塞UI的能力的.

  4. hdu 4605 树状数组 ****

    题目大意很简单. 有一颗树(10^5结点),所有结点要么没有子结点,要么有两个子结点.然后每个结点都有一个重量值,根结点是1 然后有一个球,从结点1开始往子孙结点走. 每碰到一个结点,有三种情况 如果 ...

  5. Linux/CentOS实现交换机-简单的交换机实现

    个人理解: 1.交换机的核心在于Mac地址学习,使其能在全双工/半双工下进行转发工作. 2.对于专业的交换机来说,使用的是专业的网络芯片并自己实现里面的协议,比如说华为的,为什么能卖那么贵,贵在于网络 ...

  6. OpenVPN的ipp.txt为空不生效的问题

    1.ipp.txt是分配固定IP使用的,但在tun模式下里面的ip地址不是写使用着的IP,而是30位子网中没有列举出来的启动一位,比如我要给客户机分配为10.8.0.6的IP,那么它这个文件填写的是1 ...

  7. 您该选择PRINCE2 还是 PMP认证

    您该选择PRINCE2 还是 PMP认证? 很多人都问我,这是一个非常常见的问题,作为一个项目经理,他们是否应选择PRINCE2或PMP认证,因为这两个认证都是全世界非常流行的. PRINCE2 是一 ...

  8. 视频监控系统:C/S &amp; B/S

    近期一直和视频监控打交道.也做了大量的工作.当中包括了监控系统的两种模式实现: 1.C/S架构 C/S架构,主要是Android系统下监控client设计,基于VLC实现,可直接观看IP摄像机RTSP ...

  9. ARM LDR/STR, LDM/STM 指令

    这里比较下容易混淆的四条指令,已经在这4条指令的混淆上花费了很多精力,现在做个小结,LDR,STR,LDM,STM这四条指令, 关于LDM和STM的说明,见另外一个说明文件,说明了这两个文件用于栈操作 ...

  10. mysql 筛选重复项(单列或者多列同时重复)

    原文:https://blog.csdn.net/luyaran/article/details/80929026 -------------单列----------------------- SEL ...