Go语言标准库-Reader接口
2018-01-16 15:32
513 查看
根据 Go 语言中关于接口和实现了接口的类型的定义(Interface_types),我们知道
Reader 接口的方法集(Method_sets)只包含一个
Read 方法,因此,所有实现了 Read 方法的类型都实现了 io.Reader 接口,也就是说,在所有需要 io.Reader 的地方,可以传递实现了 Read() 方法的类型的实例。
示例代码:
// io.Reader 接口示例
package main
import (
"fmt"
"io"
"os"
"strings"
)
func main(){
ReaderExample()
}
func ReaderExample() {
FOREND:
for {
readerMenu()
var ch
string
//利用scan阻塞线程,并扫描标准输入流,如果有输入则存入 ch中
fmt.Scanln(&ch)
var (
data []byte
err error
)
switch strings.ToLower(ch) {
case
"1":
fmt.Println("请输入不多于9个字符,以回车结束:")
data, err =
ReadFrom(os.Stdin, 11)
case
"2":
file, err := os.Open("../test.txt")
if err
!= nil {
fmt.Println("打开文件 01.txt 错误:", err)
continue
}
data, err =
ReadFrom(file, 9)
file.Close()
case
"3":
data, err =
ReadFrom(strings.NewReader("from string"),
12)
case
"4":
fmt.Println("暂未实现!")
case
"b":
fmt.Println("返回上级菜单!")
break FOREND
case
"q":
fmt.Println("程序退出!")
os.Exit(0)
default:
fmt.Println("输入错误!")
continue
}
if err
!= nil {
fmt.Println("数据读取失败,可以试试从其他输入源读取!")
} else {
fmt.Printf("读取到的数据是:%s\n", data)
}
}
}
func ReadFrom(reader io.Reader, num
int) ([]byte,
error) {
p := make([]byte, num)
n, err := reader.Read(p)
if n >
0 {
return p[:n],
nil
}
return p, err
}
func readerMenu() {
fmt.Println("")
fmt.Println("*******从不同来源读取数据*********")
fmt.Println("*******请选择数据源,请输入:*********")
fmt.Println("1 表示 标准输入")
fmt.Println("2 表示 普通文件")
fmt.Println("3 表示 从字符串")
fmt.Println("4 表示 从网络")
fmt.Println("b 返回上级菜单")
fmt.Println("q 退出")
fmt.Println("***********************************")
}
Reader 接口的方法集(Method_sets)只包含一个
Read 方法,因此,所有实现了 Read 方法的类型都实现了 io.Reader 接口,也就是说,在所有需要 io.Reader 的地方,可以传递实现了 Read() 方法的类型的实例。
示例代码:
// io.Reader 接口示例
package main
import (
"fmt"
"io"
"os"
"strings"
)
func main(){
ReaderExample()
}
func ReaderExample() {
FOREND:
for {
readerMenu()
var ch
string
//利用scan阻塞线程,并扫描标准输入流,如果有输入则存入 ch中
fmt.Scanln(&ch)
var (
data []byte
err error
)
switch strings.ToLower(ch) {
case
"1":
fmt.Println("请输入不多于9个字符,以回车结束:")
data, err =
ReadFrom(os.Stdin, 11)
case
"2":
file, err := os.Open("../test.txt")
if err
!= nil {
fmt.Println("打开文件 01.txt 错误:", err)
continue
}
data, err =
ReadFrom(file, 9)
file.Close()
case
"3":
data, err =
ReadFrom(strings.NewReader("from string"),
12)
case
"4":
fmt.Println("暂未实现!")
case
"b":
fmt.Println("返回上级菜单!")
break FOREND
case
"q":
fmt.Println("程序退出!")
os.Exit(0)
default:
fmt.Println("输入错误!")
continue
}
if err
!= nil {
fmt.Println("数据读取失败,可以试试从其他输入源读取!")
} else {
fmt.Printf("读取到的数据是:%s\n", data)
}
}
}
func ReadFrom(reader io.Reader, num
int) ([]byte,
error) {
p := make([]byte, num)
n, err := reader.Read(p)
if n >
0 {
return p[:n],
nil
}
return p, err
}
func readerMenu() {
fmt.Println("")
fmt.Println("*******从不同来源读取数据*********")
fmt.Println("*******请选择数据源,请输入:*********")
fmt.Println("1 表示 标准输入")
fmt.Println("2 表示 普通文件")
fmt.Println("3 表示 从字符串")
fmt.Println("4 表示 从网络")
fmt.Println("b 返回上级菜单")
fmt.Println("q 退出")
fmt.Println("***********************************")
}
相关文章推荐
- Go语言标准库Json的使用.
- Go 语言标准库之 strings包
- 深入解析Go语言的io.ioutil标准库使用
- Go语言标准库_输入/输出
- GO语言标准库概览
- GO语言标准库概览
- Go语言web简单配置
- go 语言for循环的使用
- Go语言常用字符串处理方法实例汇总
- Go 语言循环语句
- Go语言之嵌入类型
- go语言函数例题
- Go语言如何实现遗传算法
- Google大神深度讲解GO语言实战视频教程
- GO语言UDP小笔记
- go语言在请求http时加入自定义http header的方法
- 放弃Python转向Go语言:我们找到了以下9大理由
- 龙芯平台上构建Go语言环境指南
- windows下Go语言开发环境搭建
- GO语言异常处理机制panic和recover分析