golang(7):文件读写 & 错误处理

终端读写

操作终端相关文件句柄常量

os.Stdin        // 标准输入
os.Stdout        // 标准输出 (输出到终端)
os.Stderr        // 标准错误输出 (输出到终端)

fmt 常见用法

fmt.Scanln(&firstName, &lastName)                // 从终端读取字符串(以空格分隔)
fmt.Scanf("%s %s", &firstName, &lastName)        // 作用同 fmt.Scanln(),但 fmt.Scanf() 既能读取字符串也能读取数字

fmt.Printf("Hi %s %s!\n", firstName, lastName)    // 格式化输出
fmt.Sscanf(input, format, &f, &i, &s)            // 从字符串中格式化读入(第一个参数表示要读取的字符串,第二个参数表示读取格式,后面的参数表示赋给哪些变量)

示例代码:

package main

import "fmt"

type Student struct{
    Name string
    Age int
    Score float64
}

func main(){
    var s = "stu01 age is 18 score is 95.5"
    var stu Student
    
    fmt.Sscanf(s,"%s age is %d score is %f",&stu.Name,&stu.Age,&stu.Score)    // 变量要传入地址
    fmt.Println(stu)
}

// 运行结果:
[root@NEO example01_Sscanf]# go run main/main.go
{stu01 18 95.5}
[root@NEO example01_Sscanf]# 

带缓冲区的读写:

示例代码:(从标准输入中读取

package main

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

func main(){
    reader := bufio.NewReader(os.Stdin)        // go 的 struct 没有构造函数,所以 bufio 包中自己写了一个构造函数 NewReader,回一个 Reader实现的指针;bufio.NewReader() 需要传入一个 io.Reader 接口,这个接口中吸有一个 Read() 方法,而 os.Stdin 也实现 Read() 方法,即实现了 io.Reader 这个接口

    fmt.Println("pls input:")
    str,err := reader.ReadString('\n')        // 带缓存区的读取; ReadString() 中的参数是 byte 形式的 分隔符,所以要用 单引
    if err != nil {
        fmt.Println("read string failed:",err)
        return
    }

    fmt.Printf("read string success,str: %s\n",str)
}

// 运行结果:
[root@NEO example02_bufio01]# go run main/main.go
pls input:
i am neo
read string success,str: i am neo

[root@NEO example02_bufio01]# 

猜你喜欢

转载自www.cnblogs.com/neozheng/p/11297027.html