文档章节

Go笔记-控制台相关

漂泊尘埃
 漂泊尘埃
发布于 2017/02/27 16:26
字数 436
阅读 12
收藏 1
点赞 0
评论 0

从控制台读取输入

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

实用的Laravel Debug调试工具

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

Yuansir ⋅ 2015/01/19 ⋅ 2

C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo

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

雲霏霏 ⋅ 2014/08/19 ⋅ 0

1+1=2的 blog 文章索引

百度空间中 原blog部分文章 索引:http://hi.baidu.com/cyclone/home Qt Bugs 通过 Qt Bugs 学习 Qt 似乎是一个不错的方法。 中文相关 中文问题说到底就是一个 unicode 和传统窄字符串 char...

晨曦之光 ⋅ 2012/05/08 ⋅ 0

Symfony框架控制台常用命令

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

初学者的优化 ⋅ 04/10 ⋅ 0

机器学习Tensorflow笔记1:Hello World到MNIST实验

最近重新梳理了我职业生涯规划,其中人工智能是我最重要的一个职业方向,所以就开始了人工智能的学习,其中Tensorflow是机器学习中一个很热门的框架,是由Google开源的,是一个不错的方向。由...

ImWiki ⋅ 05/12 ⋅ 0

小程序环境搭建与开发工具的简单介绍

笔记内容:小程序环境搭建与开发工具的简单介绍笔记日期:2018-1-03 下载开发工具 和其他产品的开发一样,开发小程序也需要搭建相应的环境,小程序的开发环境很简单,下载个开发工具就可以了...

ZeroOne01 ⋅ 01/03 ⋅ 0

SpringBoot笔记(六)日志

SpringBoot默认使用作为日志记录。 同时也对包的和做了默认配置 默认配置 Spring Boot默认使用Logback来记录日志,并用INFO级别输出到控制台 默认输出元素: 时间日期:精确到毫秒 日志级别:...

世外大帝 ⋅ 04/25 ⋅ 0

Mini 容器学习笔记1——环境搭建(基础篇)

一. 环境下载 到Mini 容器的官方网站下载NLite框架的二进制文件,下载并解压后就可以了。 我们使用NLite框架需要用到下面的文件: NLite.dll(必要) 二. 建立NLite应用程序 新建一个控制台应用...

netcasewqs ⋅ 2011/08/26 ⋅ 0

《从零开始学Swift》学习笔记(Day4)——用Playground工具编写Swift

Swift 2.0学习笔记(Day4)——用Playground工具编写Swift 原创文章,欢迎转载。转载请注明:关东升的博客 Playground程序运行①区域是代码编写视图;②区域是运行结果视图;③区域是时间轴视...

智捷课堂 ⋅ 2015/08/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

关于“幂等”操作

一个幂等(idempotent)操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同. 开发中, 我们经常考虑幂等操作的场景有“接口调用”、“MQ消费”、“自动任务”等 接口调用, 可能出现...

零二一七 ⋅ 28分钟前 ⋅ 0

Dubbo服务服务暴露之ProxyFactory Invoker

Dubbo服务暴露过程中有涉及到调用ProxyFactory 中方法获取Invoker对象的过程,现在我们来深究下源码,来看下这个过程是在做些什么,返回的Invoker 对象是什么,我们来看一下代码的切入点: ...

哲别0 ⋅ 43分钟前 ⋅ 0

GP两种连接方式性能测试

GP两种连接方式性能测试 Pivotal import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class GPQueryStrin......

仔仔1993 ⋅ 47分钟前 ⋅ 0

jsonrpc-4j代码解析

解析文件 AutoJsonRpcServiceImplExporter JsonServiceExporter AutoJsonRpcServiceImplExporter 路径:com.googlecode.jsonrpc4j.spring.AutoJsonRpcServiceImplExporter AutoJsonRpcServi......

郭恩洲_OSC博客 ⋅ 今天 ⋅ 0

百度搜索

from selenium import webdriver import time brower=webdriver.Firefox() brower.get('http://www.baidu.com') input=brower.find_element_by_id('kw') input.send_keys('中南大学') time.s......

南桥北木 ⋅ 今天 ⋅ 0

tomcat 日志记录器

1、日志记录器是记录消息的组件 日志记录器需要与某个servlet 容器相关联 2、Logger 接口 共定义了5种日志级别:FATAL、ERROR、WARNING、INFORMATION、DEBUGGER setVerbosity 设置级别 setC...

职业搬砖20年 ⋅ 今天 ⋅ 0

Thrift RPC实战(三) Thrift序列化机制

1.Thrift基础架构 Thrift是一个客户端和服务端的架构体系,数据通过socket传输; 具有自己内部定义的传输协议规范(TProtocol)和传输数据标准(TTransports); 通过IDL脚本对传输数据的数据结构...

lemonLove ⋅ 今天 ⋅ 0

网站建设就要像2018世界杯的俄罗斯队大杀四方[图]

今天心情不错,因为昨天晚上观看了世界杯比赛,尤其是对俄罗斯队的大杀四方感到十分霸气侧漏啊,因此我联想到了自己的博客网站,我的博客是去年年底上线的,一直想建设一个关于读书和读后感作...

原创小博客 ⋅ 今天 ⋅ 0

linux 信号机制

signal(SIGPIPE, SIG_IGN); TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包. 按照TCP协...

xxdd ⋅ 今天 ⋅ 0

my.cnf, my-small.cnf, my-medium.cnf, my-large.cnf

1. my-small.cnf # Example MySQL config file for small systems.## This is for a system with little memory (<= 64M) where MySQL is only used# from time to time and it's importa......

周云台 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部