文档章节

Go笔记-控制台相关

漂泊尘埃
 漂泊尘埃
发布于 2017/02/27 16:26
字数 436
阅读 19
收藏 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
博文 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
Symfony框架控制台常用命令

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

初学者的优化
04/10
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

没有更多内容

加载失败,请刷新页面

加载更多

SonarQube+Scanners代码质量管理

简介 sonaqube是一个开源代码质量管理平台,致力于持续分析和测量技术质量。 系统构成 SonarQube平台由4部分组成: SonarQube服务器 Web服务器的开发者,管理者,浏览质量快照和配置SonarQu...

阿dai
57分钟前
0
0
mysql-router 8 yum安装

1.配置安装源 #配置MySQL5.7的安装源 #https://repo.mysql.com/mysql57-community-release-el7.rpm #https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm rpm -Uvh https:/......

MichaelShu
今天
0
0
     甲骨人-MySQL网络课-day03

===================================================================================== ======================= 第三章 mysql SQL语句 1、mysql接口自带命令 1.1、\h 或 help 或 ? 1.2、......

hnairdb
今天
0
0
Redis异构集群之间数据迁移方案

一、Redis集群迁移工具 最近在做Redis数据迁移,网上找了两款开源的Redis迁移工具。 第一种:redis-port Codis官方提供的一个工具,redis-port是一个Redis工具,通过解析rdb文件,实现Redis...

IT--小哥
今天
3
0
解压zip包(zip4j)

1:引入zip4j_1.3.2.jar 2:源码如下: package test;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import net.lingal......

uug
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部