go基础库之读取标准输入

栏目: Go · 发布时间: 7年前

内容简介:每个进程都拥有自己的标准输入、输出和错误文件描述符。

每个进程都拥有自己的标准输入、输出和错误文件描述符。 stdin 作为进程的输入。本文将介绍如何从 stdin 读取数据。

读取标准输入

Golang 版本

1.12.1

前言

每个进程都拥有自己的标准输入、输出和错误文件描述符。 stdin 作为进程的输入。本文将介绍如何从 stdin 读取数据。

实现

1.创建文件 fmt.go ,代码如下:

package main

import "fmt"

func main() {

	var name string
	fmt.Println("你叫什么名字?")
	fmt.Scanf("%s\n", &name)

	var age int
	fmt.Println("你几岁?")
	fmt.Scanf("%d\n", &age)

	fmt.Printf("你好! %s, 你的年龄是 %d\n", name, age)

}
$ go run fmt.go
你叫什么名字?
GanymedeNil
你几岁?
25
你好! GanymedeNil, 你的年龄是 25

2.创建文件 scanner.go ,代码如下:

package main

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

func main() {

	// scan能够按行扫描输入
	sc := bufio.NewScanner(os.Stdin)

	for sc.Scan() {
		txt := sc.Text()
		fmt.Printf("Echo: %s\n", txt)
	}

}
$ go run scanner.go
Hello
Echo: Hello

3.创建文件 reader.go ,代码如下:

package main

import (
	"fmt"
	"os"
)

func main() {

	for {
		data := make([]byte, 8)
		n, err := os.Stdin.Read(data)
		if err == nil && n > 0 {
			process(data)
		} else {
			break
		}
	}

}

func process(data []byte) {
	fmt.Printf("Received: %X %s\n", data, string(data))
}
$  echo 'Go is awesome!' | go run reader.go
Received: 476F206973206177 Go is aw
Received: 65736F6D65210A00 esome!

原理

Go进程的 stdin 可以通过 os 包的 Stdin 获取。 实际上,它是一个实现 Reader 接口的 File 类型。 从 Reader 里读取是非常容易的。 前面的代码展示了如何从 Stdin 读取的三种非常常见的方法。

第一个例子演示了 fmt 包的使用,它提供了 Scan 、 Scanf 和 Scanln 函数。 Scanf 函数将输入写入给定变量。 Scanf 的优点是你可以确定扫描值的格式。 Scan 函数只是将输入写入变量(没有预定义格式), Scanln 顾名思义,读取以换行符结束的输入。

Scanner 是第二个例子,它提供了扫描较大输入的便捷方式。 Scanner 包含了 Split 功能,通过该功能可以自定义分割功能。 例如,要扫描 stdin 中的单词,可以使用 bufio.ScanWords 作为预定义的 SplitFunc 。

通过 Reader API读取是最后提出的方法。 这个可以让你更好地控制输入的读取方式。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

首席产品官2 从白领到金领

首席产品官2 从白领到金领

车马 / 机械工业出版社 / 79元

《首席产品官》共2册,旨在为产品新人成长为产品行家,产品白领成长为产品金领,最后成长为首席产品官(CPO)提供产品认知、能力体系、成长方法三个维度的全方位指导。 作者在互联网领域从业近20年,是中国早期的互联网产品经理,曾是周鸿祎旗下“3721”的产品经理,担任CPO和CEO多年。作者将自己多年来的产品经验体系化,锤炼出了“产品人的能力杠铃模型”(简称“杠铃模型”),简洁、直观、兼容性好、实......一起来看看 《首席产品官2 从白领到金领》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试