Go基础--终端操作和文件操作
终端操作
操作终端相关的文件句柄常量
os.Stdin:标准输入
os.Stdout:标准输出
os.Stderr:标准错误输出
关于终端操作的代码例子:
package main import "fmt" var (
firstName,lastName,s string
i int
f float32
input = "56.12/5212/Go"
format = "%f/%d/%s"
) func main() {
fmt.Println("please enter your full name:")
//fmt.Scanln(&firstName,&lastName)
fmt.Scanf("%s %s",&firstName,&lastName) //这一句和上一句是相同的
fmt.Printf("Hi %s %s!\n",firstName,lastName)
fmt.Sscanf(input,format,&f,&i,&s)
fmt.Println("From the string we read:",f,i,s) }
关于带缓冲区的读写
这里需要用到一个包:bufio
下面是代码例子:
package main import (
"bufio"
"os"
"fmt"
) var inputReader *bufio.Reader
var input string
var err error func main(){
inputReader = bufio.NewReader(os.Stdin)
fmt.Println("please enter some input:")
// 下面这个表示我们读取一行,最后是以\n 为分割的,\n表示换行
input,err = inputReader.ReadString('\n')
if err != nil{
fmt.Println(err)
return
}
fmt.Printf("the input was:%s\n",input)
}
练习终端操作
从终端读取一行字符串,统计英文,数字,空格以及其他字符的数量
代码实现:
package main import (
"fmt"
"bufio"
"os"
) func judgeCount(str string){
var countNum, countLetter, countSpace, countOther int
for _, v := range str {
if v >= 'a' && v <= 'z' || v >= 'A' && v <= 'Z' {
countLetter++
} else if v >= '0' && v <= '9' {
countNum++
} else if v == ' ' {
countSpace++
} else {
countOther++
}
}
fmt.Println("英文字母的个数:", countLetter)
fmt.Println("数字的个数:", countNum)
fmt.Println("空格的个数:", countSpace)
// 关于其他字符这里进行减一是因为这里多算了一个换行符\n
fmt.Println("其他字符的个数:", countOther-1) } func main(){
fmt.Println("请输入一行字符串:")
var inputReader *bufio.Reader
inputReader = bufio.NewReader(os.Stdin)
str,err := inputReader.ReadString('\n')
if err!=nil{
fmt.Println("输入错误,错误为:",err)
return
}
judgeCount(str)
}
关于文件读写
os.File封装所有文件相关的操作
打开一个文件进行读操作:os.Open(name string)(*File,error)
关闭一个文件:File.Close()
关于文件操作的一个简单例子:
package main import (
"os"
"fmt"
"bufio"
"io"
) func main(){
file,err:= os.Open("/Users/zhaofan/go_project/src/go_dev/07/ex13/main.go")
if err!= nil{
fmt.Println("open file is err:",err)
return
}
//这里切记在打开文件的时候跟上defer 关闭这个文件,防止最后忘记关闭
defer file.Close()
inputReader := bufio.NewReader(file)
for {
inputString,readError:= inputReader.ReadString('\n')
// 这里readError == io.EOF表示已经读到文件末尾
if readError ==io.EOF{
return
}
// 下面会把每行的内容进行打印
fmt.Printf("the input is:%s",inputString)
} }
上面例子中关于读文件是一行一行的读的,下面我们也可以一次性读完整的文件,但是切记如果文件过大,这种方法不适用,这里用到是io/ioutil包
package main import (
"io/ioutil"
"fmt"
) func main(){
buf,err := ioutil.ReadFile("/Users/zhaofan/go_project/src/go_dev/07/ex13/main.go")
if err != nil{
fmt.Println("read file is err:",err)
return
}
fmt.Printf("%s\n",string(buf)) }
关于读取压缩文件的例子,这里用到的是compress/gzip包
package main import (
"os"
"fmt"
"compress/gzip"
"bufio"
"io"
) func main(){
file,err := os.Open("/Users/zhaofan/go_project/src/go_dev/07/ex6/ggg.gz")
if err != nil{
fmt.Println("open file err:",err)
return
}
defer file.Close() reader,err :=gzip.NewReader(file)
if err != nil{
fmt.Println("gzip err:",err)
return
}
bufReader := bufio.NewReader(reader)
for{
line,err := bufReader.ReadString('\n')
if err != nil{
if err == io.EOF{
break
}
fmt.Println("read file err",err)
break
}
fmt.Printf("%s",line)
} }
关于文件的写入
os.OpenFile("filename",os.O_WRONLY|os.O_CREATE,066)
第一个参数是文件名
第二个参数是文件的打开模式:
os.O_WRONLY:只写
os.O_CREATE:创建文件
os.O_RDONLY:只读
os.O_RDWR:读写
os.O_TRUNC:清空
第三个参数:权限控制
r-->4
w-->2
x-->1
这里和linux的是一样的
关于写入文件的一个例子,这里写了两种方法一种是直接writestring方法,一种是通过bufio的方式:
package main import (
"os"
"fmt"
"bufio"
) func testWriteFile(){
file,err:= os.OpenFile("mylog.txt",os.O_WRONLY|os.O_CREATE,0666)
if err!= nil{
fmt.Println("open file failed:",err)
return
}
defer file.Close()
for i:=0;i<10;i++{
file.WriteString(fmt.Sprintf("go web 开发\n"))
} } func testWriteBuf(){
file,err:= os.OpenFile("mylog.txt",os.O_WRONLY|os.O_CREATE,0666)
if err!= nil{
fmt.Println("open file failed:",err)
return
}
defer file.Close() bufioWrite := bufio.NewWriter(file)
for i:=0;i<10;i++{
bufioWrite.WriteString("hello\n")
}
bufioWrite.Flush()
} func main(){
//testWriteFile()
testWriteBuf()
}
关于拷贝文件的例子:
package main import (
"os"
"io"
) func CopyFile()(writen int64,err error){
src,err:=os.Open("mylog.txt")
if err!= nil{
return
}
defer src.Close()
dst,err := os.OpenFile("dst.txt",os.O_WRONLY|os.O_CREATE,0644)
if err!=nil{
return
}
defer dst.Close()
return io.Copy(dst,src)
} func main(){
CopyFile()
}
关于获取命令行参数
os.Args是一个string的切片,用来存储所有命令行的参数
但是通过这种方式获取参数有点笨拙,并且需要做很多的判断,我们可以通过go里面的flag包来做,代码例子如下:
package main import (
"fmt"
"flag"
) var(
conf string
level int
) func init() {
flag.StringVar(&conf,"c","/home/user/zhaofan","请指定配置文件路径")
flag.IntVar(&level,"l",8,"请指定日志级别")
flag.Parse() //这个非常重要不能忘记写
} func main() {
//for _,val := range os.Args{
// fmt.Println(val)
//} fmt.Printf("conf is :%s\n",conf)
fmt.Printf("level is :%d\n",level)
}
上面的例子设置了默认参数,如果我们想自定义参数在运行的时候添加 -c=内容 -l=内容 ,就可以用我们通过命令行参数传入的值进行处理
Go基础--终端操作和文件操作的更多相关文章
- golang之终端操作,文件操作
		
终端操作 操作终端相关的文件句柄常量os.Stdin:标准输入os.Stdout:标准输出os.Stderr:标准错误输出 关于终端操作的代码例子: package main import " ...
 - python基础之元组、文件操作、编码、函数、变量
		
1.集合set 集合是无序的,不重复的,主要作用: 去重,把一个列表变成集合,就可以自动去重 关系测试,测试两组数据的交集,差集,并集等关系 操作例子如下: list_1 = [1,4,5,7,3,6 ...
 - Python之路:Python 基础(三)-文件操作
		
操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = file('文件路径', '模式') # 还有一种方法open 例1.创建文件 f = file('myfile. ...
 - Python基础(七)-文件操作
		
一.文件处理流程 1.打开文件,得到文件句柄赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 二.基本操作 f = open('zhuoge.txt') #打开文件 first_line = ...
 - python基础 (编码进阶,文件操作和深浅copy)
		
1.编码的进阶 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码. 即先将其他编码的字符串解码(decode)成unicode,再从uni ...
 - python基础(四)文件操作和集合
		
一.文件操作 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 1.文件基本操作: f = open('file.txt','r') # ...
 - Py修行路  python基础 (七)文件操作 笔记(随时更改添加)
		
文件操作流程: 1.打开文件 open() 2.操作文件 read .writeread(n) n对应读指定个数的 2.x中读取的是字节! 3.x中读取的是字符!read 往外读取文件,是以光标位置开 ...
 - python基础(三)-- 文件操作
		
一. 文件操作: 对文件操作流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 现有文件如下 : Somehow, it seems the love I kn ...
 - python3速查参考- python基础 5 -> 常用的文件操作
		
文件的打开方式 打开方式 详细释义 r 以只读方式打开文件.文件的指针会放在文件的开头.这是默认模式. rb 以二进制只读方式打开一个文件.文件指针会放在文件的开头. r+ 以读写方式打开一个文 ...
 
随机推荐
- Oracle 12c 用户创建、角色、权限
			
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAd4AAADHCAIAAAA4UqVzAAAgAElEQVR4nOy9Z5Bk13UmyN/6vZrlrG
 - 【转载】Java 网络编程
			
本文主要是自己在网络编程方面的学习总结,先主要介绍计算机网络方面的相关内容,包括计算机网络基础,OSI参考模型,TCP/IP协议簇,常见的网络协议等等,在此基础上,介绍Java中的网络编程. 一. ...
 - RHEL7 添加网卡并设置多个IP地址
			
首先在虚拟机管理界面中给该虚拟机添加一块虚拟网卡,VirtualBox虚拟机中要shutdown才能添加. [root@rhel7 ~]# nmcli device show | grep -i de ...
 - yum安装提示错误Thread/process failed: Thread died in Berkeley DB library
			
问题描述: yum 安装更新提示 rpmdb: Thread/process failed: Thread died in Berkeley DB library 问题解决: 01.删除yum临时库文 ...
 - phpBB3.1和3.2
			
闲逛看到一个帖子, phpBB3的论坛经常被机器人注册攻击, 要找人做拦截. 出于兴趣, 联系了一下. 论坛是一个做健康养老调查的社会机构的, 版本3.1, 十年前我还在更新phpbb中文包的时候, ...
 - idea及webstorm破解方法(转)
			
首先要做的就是去下载 破解的jar包,本来要上传的但是检测资源已经存在,但是能下到的地方很多,这里贴出一个链接 点击:链接链接. 点击下载上图当中的jar包 . 然后找到自己安装webstorm的安装 ...
 - linux下软链接与硬链接及其区别
			
linux下创建链接命令 ln -s 软链接 这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s, 具体用法是:ln ...
 - Linux下网卡混杂模式设置和取消
			
工作中发现一个网卡工作状态不对了,查看了一下,发现这个网卡和正常工作的网卡 信息不一样,它显示的居然是混杂模式,而正常工作的是 running 模式 ,所以来了解下混杂模式怎么取消... 下文来自 ...
 - 进阶之路(中级篇) - 018 基于arduino的简易版智能衣架
			
一. 设备及要求 目的:制作一个可以自动根据事实的天气的状况进行对衣架上的衣服进行晾晒. 基础装置:可伸缩的晾衣架. 开发环境:Arduino1. 8.1 主控板:Arduino UNO 动力装 ...
 - XmlSerializer 对象序列化成XML 自定义编码格式(gb2312)
			
随着面向服务(SOA)的开发方式的兴起,客户端和服务端之间的消息传送,很多采用了XML的格式.但是大家在日常的开发中,应该会有这么种体验,就是组织xml格式的代码太繁琐,这篇随笔也是为了和大家分享下简 ...