文档章节

Go笔记-控制台相关

漂泊尘埃
 漂泊尘埃
发布于 2017/02/27 16:26
字数 436
阅读 12
收藏 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)
}

© 著作权归作者所有

共有 人打赏支持
漂泊尘埃

漂泊尘埃

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

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

iotisan
05/11
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 似乎是一个不错的方法。 中文相关 中文问题说到底就是一个 unicode 和传统窄字符串 char...

晨曦之光
2012/05/08
184
0
Symfony框架控制台常用命令

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

初学者的优化
04/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部