终端操作

操作终端相关的文件句柄常量
os.Stdin:标准输入
os.Stdout:标准输出
os.Stderr:标准错误输出

关于终端操作的代码例子:

package mainimport "fmt"func main() {var (firstName, lastName, s stringi                      intf                      float32input                  = "52.22/2334/go"format                 = "%f/%d/%s")fmt.Println("Please input your name")//fmt.Scanf("%s %s", &firstName, &lastName)fmt.Scanln(&firstName, &lastName) //和上一句的效果相同fmt.Printf("Hi %s %s\n", firstName, lastName)fmt.Sscanf(input, format, &f, &i, &s)fmt.Println("From the string we read are\n", f, i, s)
}

关于带缓冲区的读写

这里需要用到一个包:bufio

下面是代码例子:

package mainimport ("bufio""fmt""os"
)var inputReader *bufio.Reader
var input string
var err errorfunc main() {inputReader = bufio.NewReader(os.Stdin)fmt.Println("Please input some words")//// 下面这个表示我们读取一行,最后是以\n 为分割的,\n表示换行input, err = inputReader.ReadString('\n')if err != nil {fmt.Printf("error:", err)return}fmt.Printf("the input was:%s\n", input)
}

练习终端操作

从终端读取一行字符串,统计英文,数字,空格以及其他字符的数量
代码实现:

package mainimport ("bufio""fmt""os"
)func judge(str string) {var countNum, countLetter, countSpace, countOther intfor _, 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.Printf("字母的数量是:%d\n", countLetter)fmt.Printf("数字的数量是:%d\n", countNum)fmt.Printf("空格的数量是:%d\n", countSpace)//之所以-1,是因为多算了一个换行符\nfmt.Printf("其他字符的数量是:%d\n", countOther-1)
}
func main() {var inputReader *bufio.ReaderinputReader = bufio.NewReader(os.Stdin)str, err := inputReader.ReadString('\n')if err != nil {fmt.Println(err)return}judge(str)
}

关于文件读写

os.File封装所有文件相关的操作

打开一个文件进行读操作:os.Open(name string)(*File,error)
关闭一个文件:File.Close()

关于文件操作的一个简单例子:

package mainimport ("bufio""fmt""io""os"
)func main() {//注意这里文件地址需要用双引号file, err := os.Open("/Users/myname/learngo/src/go_dev/day06/bufio/bufio.go")if err != nil {fmt.Println("open file err:", err)return}//注意这里defer关闭文件defer file.Close()inputReader := bufio.NewReader(file)i := 0for {inputString, readErr := inputReader.ReadString('\n')if readErr == io.EOF { //表示读取到文件末尾
            return}i++ //行数//打印每行的行号和内容fmt.Printf("%d %s\n", i, inputString)}
}

上面例子中关于读文件是一行一行的读的,下面我们也可以一次性读完整的文件,但是切记如果文件过大,这种方法不适用,这里用到是io/ioutil包

package mainimport ("fmt""io/ioutil"
)func main() {buff, err := ioutil.ReadFile("/Users/myname/learngo/src/go_dev/day06/bufio/bufio.go")if err != nil {fmt.Println("read file error:", err)return}fmt.Printf("the content of file is:%s\n", string(buff))
}

关于读取压缩文件的例子,这里用到的是compress/gzip包

package mainimport ("bufio""compress/gzip""fmt""io""os"
)func main() {//注意这里的压缩文件需要使gzip -k xxx,-k意思是保留源文件file, err := os.Open("/Users/myname/learngo/src/go_dev/day06/gzip/bufio.go.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 file err:", err) //如果不是.gz文件,则gzip: invalid header
        return}bfreader := bufio.NewReader(reader)for {line, err := bfreader.ReadString('\n')if err != nil {if err == io.EOF {break}fmt.Println("read file err:", err)break}fmt.Printf("%s\n", 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 mainimport ("bufio""fmt""os""strconv"
)func testWriteFile() {file, err := os.OpenFile("testWriteFile.txt", os.O_WRONLY|os.O_CREATE, 0666)if err != nil {fmt.Println("open file error:", err)return}defer file.Close()for i := 0; i < 10; i++ {file.WriteString("hello " + strconv.Itoa(i) + "\n")}
}func testWriteBufio() {file, err := os.OpenFile("testWriteBufio.txt", os.O_WRONLY|os.O_CREATE, 0666)if err != nil {fmt.Println("open file error;", err)return}defer file.Close()bufioWriter := bufio.NewWriter(file)for i := 0; i < 10; i++ {bufioWriter.WriteString(strconv.Itoa(i) + "hello\n")}bufioWriter.Flush()}func main() {testWriteFile()testWriteBufio()
}

关于拷贝文件的例子:

package mainimport ("fmt""io""os"
)func copyFile() (writen int64, err error) { //注意这里返回的参数src, err := os.Open("testWriteFile.txt")if err != nil {fmt.Println("open src file error: ", err)return}defer src.Close()dst, err := os.OpenFile("dst.txt", os.O_WRONLY|os.O_CREATE, 0644)if err != nil {fmt.Println("openfile dst error: ", err)return}defer dst.Close()return io.Copy(dst, src)
}
func main() {copyFile()
}

关于获取命令行参数

os.Args是一个string的切片,用来存储所有命令行的参数
但是通过这种方式获取参数有点笨拙,并且需要做很多的判断,我们可以通过go里面的flag包来做,代码例子如下:

package mainimport ("flag""fmt"
)var (conf  stringlevel int
)func init() {flag.StringVar(&conf, "c", "/Users/myname/", "请指定配置文件路径")flag.IntVar(&level, "l", 8, "请指定日志级别")flag.Parse() //这个非常重要,不能忘记
}func main() {fmt.Printf("conf is %s\n", conf)fmt.Printf("level is %d\n", level)//运行go run args/args.go//go run args/args.go -c '/Users/myname/learngo' -l 7/*-c string请指定配置文件路径 (default "/Users/myname/")-l int请指定日志级别 (default 8)*/
}

上面的例子设置了默认参数,如果我们想自定义参数在运行的时候添加 -c=内容 -l=内容 ,就可以用我们通过命令行参数传入的值进行处理

转自https://www.cnblogs.com/zhaof/p/8285339.html

转载于:https://www.cnblogs.com/justdoyou/p/10042151.html

golang之终端操作,文件操作相关推荐

  1. golang常用库之-文件操作(os、path、filepath、ioutil包)、Go 读文件、Go 写文件

    文章目录 golang常用库之-文件操作

  2. python day2 python基础 列表、元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码...

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...

  3. 终端命令-文件操作、编辑操作

    终端命令: 基本路径操作 相对路径:cd /users/yang/Desktop 绝对路径:cd Ddesktop . 表示当前路径 - 表示当前路径的上一层 - 表示当前路径的上2层 没有-或者以上 ...

  4. MAC终端命令-文件操作、编辑操作

    基本路径操作 相对路径:cd /users/yang/Desktop 绝对路径:cd Desktop . 表示当前路径 没有-或者以上的 文件操作 ls:查看当前路径下的文件及文件夹的名字 ls /b ...

  5. 文件和文件夹操作——文件操作实列

    1.获取文件大小 思路:使用File类的Open方法打开指定的文件,然后使用FileStream类的Length属性获取文件的长度. (1).File类的Open方法:用来打开指定路径上的FileSt ...

  6. 程序员必备—常用Linux操作(文件操作)

    前言 套用我宝哥的一句台词:自打我进宫以来,就独得皇上恩宠.这后宫佳丽三千,皇上就偏偏宠我一人-- 这个情景来描述公司的运维小哥甚是贴切,于是,程序员该懂的linux操作还是需要掌握滴,分享一波儿命令 ...

  7. Visual C++网络编程经典案例详解 第8章 网络文件传输 使用api函数操作文件 操作文件 FlushFileBuffers函数

    如果想数据被立即写入文件所在的磁盘中 可以使用函数FlushFileBuffers() 将数据强制写入文件中 原型 BOOL FlushFileBuffers(HANDLE hFile); 函数唯一参 ...

  8. 图书管理系统 利用文件txt进行读写操作 文件操作

    下面展示图书管理系统 应用文件txt进行读写操作 有用户注册(创建一个txt,将用户写入txt) 用户登录(用户输入信息,将信息与老txt比对 成功则显示图书馆内容 不成功退出) // #创建一个tx ...

  9. 【php】目录操作 文件操作

    [php] view plaincopy print? php的目录处理函数主要包括如下几个: ①mkdir():创建目录 ②is_dir():判断给定文件名是否是一个目录 ③rmdir():删除目录 ...

  10. Python中的文件操作和异常

    Python中的文件操作和异常 文章目录 Python中的文件操作和异常 一.文件 01. 文件的概念 1.1 文件的概念和作用 1.2 文件的存储方式 文本文件和二进制文件 02. 文件的基本操作 ...

最新文章

  1. Qt——模态、非模态
  2. uva-10152-乌龟排序
  3. BZOJ 2669 Luogu P3160 [CQOI2012]局部极小值 (容斥原理、DP)
  4. QML基础类型之geocircle
  5. 【dfs】I Like Matrix!
  6. 大数据,TB、PB、EB
  7. [SCM]源码管理 - SVN Server
  8. 如何满足python安装需求升级win7到SP1版本
  9. PostgreSQL 数据库跨版本升级常用方案
  10. 情侣博客源码php,分享超炫的表白页面和爱的纪念日源码
  11. 怎么提高编程能力?逻辑思维能力?
  12. 重生之丹王,炼丹入门
  13. 期货开户趋势的本质是惯性
  14. Windows 7中禁用连按五次Shift键时出现粘滞键的方法
  15. YTU 2914: xiaoping学构造函数
  16. 用Python进行数学建模(二)
  17. CAKEPHP 求助指南
  18. 【一生一芯】Chap.1 “一生一芯”实验环境配置| VMware安装Ubuntu20.04 | PA工程配置 | 解决llvm版本问题
  19. Go内核源码剖析 一 程序执行启动过程
  20. 【软件升级】奥普特SciSmart智能视觉软件三代

热门文章

  1. iptables实现NAT
  2. HBase编程 API入门系列之create(管理端而言)(8)
  3. 多窗口售票:单件模式多线程实现
  4. 基于modelsim-SE的简单仿真流程—上
  5. [转]Sql Server参数化查询之where in和like实现详解
  6. logfile switch causes incremental checkpoint?
  7. vector与list的区别
  8. css3中的渐变效果及花斑动画的实现
  9. raft算法mysql主从复制_mysql主从复制原理
  10. 视频分辨率和音频质量_高分辨率音频的声音是否比CD质量好?