文档章节

Go笔记-控制台相关

漂泊尘埃
 漂泊尘埃
发布于 2017/02/27 16:26
字数 436
阅读 22
收藏 1

从控制台读取输入

bufio

import (
	"bufio"
	"os"
)

var r *bufio.Reader = bufio.NewReader(os.Stdin)
rawLine, _, _ := r.ReadLine()
line := string(rawLine)

rawline是[]byte类型

应该使用 ReadString('\n'),读取的字符串包括 '\n' 字符。

下面是循环读取的例子:

var r *bufio.Reader = bufio.NewReader(os.Stdin)
for {
	fmt.Print("Enter command ->")
	rawLine, _, _ := r.ReadLine()
	line := string(rawLine)

	if line == "q" || line == "e" {
		break
	}

}

使用 NewScanner

	scanner := bufio.NewScanner(os.Stdin)
	for scanner.Scan() {
		fmt.Println(scanner.Text()) // Println will add back the final '\n'
	}
	if err := scanner.Err(); err != nil {
		fmt.Fprintln(os.Stderr, "reading standard input:", err)
	}

Scanner的每一次调用都会调入一个新行,并且会自动将其行末的换行符去掉;其结果可以用input.Text()得到。Scan方法在读到了新行的时候会返回true,而在没有新行被读入时,会返回false

一个词一个词读取

	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}
	if err := scanner.Err(); err != nil {
		fmt.Fprintln(os.Stderr, "reading input:", err)
	}

fmt

	var buf string
	for {
		_, err := fmt.Scanln(&buf)
		if err != nil {
			fmt.Println(err)
			break
		}
		fmt.Println(buf)
		time.Sleep(100 * time.Microsecond)
	}

读取到空格的时候就强制返回了。

还可以定义格式:

	var (
		name string
		age  int
	)
	for {
		_, err := fmt.Scanf("%s %d", &name, &age)
		if err != nil {
			fmt.Println(err)
			break
		}
		fmt.Printf("name is %s, age is %d\n", name, age)
		time.Sleep(100 * time.Microsecond)
	}

向错误流输出信息

fmt.Fprint(os.Stderr,"Fatal error: %s\n",err.Error())

清屏

package main

import (
	"os"
	"os/exec"
	"runtime"
)

var clear map[string]func() //create a map for storing clear funcs

func init() {
	clear = make(map[string]func()) //Initialize it
	clear["linux"] = func() {
		cmd := exec.Command("clear") //Linux example, its tested
		cmd.Stdout = os.Stdout
		cmd.Run()
	}
	clear["windows"] = func() {
		cmd := exec.Command("cls") //Windows example it is untested, but I think its working
		cmd.Stdout = os.Stdout
		cmd.Run()
	}
}

func CallClear() {
	value, ok := clear[runtime.GOOS] //runtime.GOOS -> linux, windows, darwin etc.
	if ok {                          //if we defined a clear func for that platform:
		value() //we execute it
	} else { //unsupported platform
		panic("Your platform is unsupported! I can't clear terminal screen :(")
	}
}

func main() {
	CallClear()
}

优雅退出程序(监听ctrl+c事件)

package main

import (
	"fmt"
	"os"
	"os/signal"
	"syscall"
)

func main() {
	signalChan := make(chan os.Signal, 1)
	signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)

	// some code

	<-signalChan
	fmt.Println("exit by program.")
	os.Exit(0)
}

© 著作权归作者所有

共有 人打赏支持
上一篇: Go笔记-加密
下一篇: Go笔记-并发
漂泊尘埃

漂泊尘埃

粉丝 5
博文 36
码字总数 71385
作品 0
朝阳
私信 提问
CoAP协议学习笔记 2.2 阿里云IoT平台接入 基础版CoAP协议接入测试

这篇笔记涉及 阿里云CoAP接入,CoAP协议学习笔记可点此查看。 1 前言 上篇笔记完成了云端产品功能定义,并生成了相应的设备证书。 这篇笔记将会跟着教程走,使用 Ubuntu 对 SDK 编译验证,先...

iotisan
05/11
0
0
Symfony框架控制台常用命令

近期因为在学习Symfony框架,嫌弃做笔记麻烦,故把常用的Symfony命令整理成博客,也跟大家一起来分享下,本命令是在Symfony2.8下的,版本的差异,可能会让命令有所差异,不过几乎都差不多。 ...

初学者的优化
04/10
0
0
实用的Laravel Debug调试工具

转载请注明: 转载自Yuansir-web菜鸟 | LAMP学习笔记 本文链接地址: 实用的Laravel Debug调试工具 主要推荐laravel几个适合开发调试用的工具 1.Clockwork 首先Chrome 插件 Clockwork 安装 Co...

Yuansir
2015/01/19
0
2
C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo

  在文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架)。单从名字我们不难发现:MEF是专门致力于解决扩展性问题的框架,MSDN中对MEF...

雲霏霏
2014/08/19
0
0
1+1=2的 blog 文章索引

百度空间中 原blog部分文章 索引:http://hi.baidu.com/cyclone/home Qt Bugs 通过 Qt Bugs 学习 Qt 似乎是一个不错的方法。 QString之arg使用一则 QTBUG-19027 QMainWindow上下文菜单内存泄...

晨曦之光
2012/05/08
309
0

没有更多内容

加载失败,请刷新页面

加载更多

AutoCAD_系统变量

https://baike.sogou.com/v53561514.htm?fromTitle=cad%E5%8F%98%E9%87%8F lunits 设置线性单位。1 科学 2 小数 3 工程 4 建筑 5 分数 6 windesk...

一个小妞
6分钟前
0
0
点播转码相关常见问题及排查方式

概述: 点播转码目前涉及用户上传自动触发转码、通过SubmitTranscodeJobs接口触发转码等方式,会出现用户转码失败的情况,这当中有用户源片的问题、也有用户设置转码参数的原因以及相关资源性...

阿里云云栖社区
7分钟前
1
0
图片base64预览及上传PHP处理

1、前端代码 <div id="img"/> <input type="file" id="img-select"/> <input type='button' id='submit'/> var newUrl; function imgPreview() {//将图片转成base64,实现预览效果 var file......

葬-花
9分钟前
0
0
Iris框架

1、安装iris: $ go get -u github.com/kataras/iris 2、golang iris web项目热重启 # 安装rizla包 $ go get -u github.com/kataras/rizla # 热重启方式启动iris项目 $ rizla main.go......

Liens
17分钟前
3
0
初探sentinel实践思考

简单说下, sentinel的优势: 友好的控制面板,支持实时监控 多种限流。支持QPS限流,线程数限流,多种限流策略,如:直接拒绝,匀速模式(漏斗),冷启动(如设置限制1000,延迟10秒,那第一...

爱吃大肉包
18分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部