美文网首页
第12章 读写数据

第12章 读写数据

作者: yezide | 来源:发表于2020-01-19 00:34 被阅读0次

1、 读取用户输入from console

package main

import "fmt"

var (
    firstName, lastName, s string
    i int
    f float32
    input = "56.12 / 5212 / Go"
    format = "%f / %d / %s"
)

func main() {
    // fmt.Println("Please enter your full name: ")
    // fmt.Scanln(&firstName, &lastName)
    // fmt.Printf("hi %s %s\n", firstName, lastName)

    // 这种方式是根据指定格式拆分字段?
    fmt.Sscanf(input, format, &f, &i, &s)
    fmt.Println("From the string we read: ", f, i, s)
}

2、用bufio读取用户输入

package main

import "fmt"
import "bufio"
import "os"

func main() {
    var inputReader *bufio.Reader
    var input string
    var err error

    inputReader = bufio.NewReader(os.Stdin)
    fmt.Println("Please enter some input: ")
    input, err = inputReader.ReadString('\n')
    if err == nil {
        fmt.Printf("The input was: %s\n", input)
    }
}

3、读取文件

package main

import "fmt"
import "bufio"
import "os"
import "io"
import "io/ioutil"

func main() {
    fileName := "/Users/lijingle/Downloads/aa.txt"
    inputFile, inputError := os.Open(fileName)
    if inputError != nil {
        fmt.Println("文件不存在!")
        return
    }

    // 无法如何文件一定要关闭
    defer inputFile.Close()

    inputReader := bufio.NewReader(inputFile)
    // 按行读取文件
    for {
        readLine, readError := inputReader.ReadString('\n')
        if readError != io.EOF {
            fmt.Printf("The input was: %s", readLine)
        } else {
            break
        }
    }

    // 读取整个文件到string中
    buf, err2 := ioutil.ReadFile(fileName)
    if err2 != nil {
        fmt.Printf("err2: %s", err2)
    }
    fmt.Printf("整个文件内容为:\n%s", string(buf))
}

3、读取压缩文件

package main

import "fmt"
import "bufio"
import "os"
import "io"
import "compress/gzip"

func main() {
    fileName := "/Users/lijingle/Downloads/aa.txt"
    inputFile, inputError := os.Open(fileName)
    if inputError != nil {
        fmt.Println("文件不存在!")
        return
    }

    // 无法如何文件一定要关闭
    defer inputFile.Close()

    fz, err := gzip.NewReader(inputFile)
    var reader *bufio.Reader
    if err != nil {
        //  不是压缩文件
        //  原书实际测试无法读出内容, 我怀疑是inputFile被gzip读掉了? 
        //  经验证确实是的, 要按照下面这重读inputFile
        inputFileNew, _ := os.Open(fileName)
        defer inputFileNew.Close()
        reader = bufio.NewReader(inputFileNew)
    } else {
        // 压缩文件
        reader = bufio.NewReader(fz)
    }
    for {
        line, err1 := reader.ReadString('\n')
        if err1 != io.EOF {
            fmt.Printf(line)
        } else {
            break
        }
    }
}

4、写文件

package main

import "fmt"
import "bufio"
import "os"
import "io"

func main() {
    fileName1 := "/Users/lijingle/Downloads/aa.txt"
    fileName2 := "/Users/lijingle/Downloads/write.txt"
    
    inputFile, _ := os.Open(fileName1)
    outputFile, _ := os.OpenFile(fileName2, os.O_WRONLY|os.O_CREATE, 0666)

    defer inputFile.Close()
    defer outputFile.Close()

    inputReader := bufio.NewReader(inputFile)
    outputWriter := bufio.NewWriter(outputFile)

    for {
        line, err := inputReader.ReadString('\n')
        fmt.Printf(line)
        outputWriter.WriteString(line)
        if err == io.EOF {
            break
        }
    }
    outputWriter.Flush()
}

5、接收命令参数

package main

import "fmt"
import "os"

func main() {
    // 入参是个切片,第0个是程序本身名字
    fmt.Printf("heddlo: %s\n", os.Args[1:])
    // 还有个flag包, 是用于接收 echo -n 这种参数的,用的时候再来看吧, 挺简单的
}

6、 大家来找错误

package main

import (
    "bufio"
    "fmt"
    "os"
    "io"
)

func main() {
    inputFile, _ := os.Open("/Users/lijingle/Downloads/aa.txt")
    outputFile, _ := os.OpenFile("/Users/lijingle/Downloads/ww.txt", os.O_WRONLY|os.O_CREATE, 0666)
    defer inputFile.Close()
    defer outputFile.Close()
    inputReader := bufio.NewReader(inputFile)
    outputWriter := bufio.NewWriter(outputFile)
    for {
        inputString, _, readerError := inputReader.ReadLine()
        if readerError == io.EOF {
            fmt.Println("readerError EOF")
            // 错误在这里, 如果用return的话, 会defer掉它,  outputFile就close掉了,导致最后无法Flush
            break
        }
        outputString := string(inputString[2:5]) + "\n"
        fmt.Println(outputString)
        _, err := outputWriter.WriteString(outputString)
        if err != nil {
            return 
        }
    }
    outputWriter.Flush()
    fmt.Println("Conversion done")
}

相关文章

  • Sharing-Sphere之Spring Boot配置

    配置示例 数据分片 + 读写分离 配置项说明 数据分片 读写分离

  • Sharding-JDBC-Java配置

    JAVA配置 配置示例 数据分片 读写分离 数据分片 + 读写分离 数据分片 + 数据脱敏 治理 配置项说明 数据...

  • 第12章 读写数据

    1、 读取用户输入from console 2、用bufio读取用户输入 3、读取文件 3、读取压缩文件 4、写文...

  • sklearn聚类

    数据的读写: numpy读写数据: pandas读写: 2、聚类 1、使用sklearn做聚类很简单,下面我们使用...

  • 第一章:初识Hadoop

    1.2数据存储与分析 数据量增大,使得传统的数据读写速度跟不上,需要通过分布式存储提高读写速度。 分布式读写数据需...

  • Sharding-JDBC-Yaml配置

    YAML配置 配置示例 数据分片 读写分离 数据分片 + 读写分离 数据分片 + 数据脱敏 治理 配置项说明 co...

  • 文件和io(cookbook笔记)

    读写文本数据 读写文本数据 读写各种不同编码的文本数据 使用带有 rt 模式的 open() 函数读取文本文件 写...

  • 11 MySQL 读写分离

    MySQL 数据读写分离 [TOC] 读写分离概述 什么是读写分离 把客户端访问数据库服务时的查询请求和写数据的请...

  • 数据读写分离、多实例配置

    数据读写分离 读写分离概述 使用读写分离的原因 数据库写入效率要低于读取效率 一般来说,数据读取频率高于写入频率 ...

  • mysql读写分离

    mysql读写分离 1、读写分离的介绍 MySQL读写分离基本原理是让master数据库处理写操作,slave数据...

网友评论

      本文标题:第12章 读写数据

      本文链接:https://www.haomeiwen.com/subject/afokzctx.html