终端操作

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

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

package main

import "fmt"

func main() {
var (
firstName, lastName, s string
i int
f float32
input = "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 main

import (
"bufio"
"fmt"
"os"
) var inputReader *bufio.Reader
var input string
var err error func 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 main

import (
"bufio"
"fmt"
"os"
) func judge(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 >= '' && v <= '' {
countNum++
} else if v == ' ' {
countSpace++
} else {
countOther++
}
}
fmt.Printf("字母的数量是:%d\n", countLetter)
fmt.Printf("数字的数量是:%d\n", countNum)
fmt.Printf("空格的数量是:%d\n", countSpace)
//之所以-1,是因为多算了一个换行符\n
fmt.Printf("其他字符的数量是:%d\n", countOther-)
}
func main() {
var inputReader *bufio.Reader
inputReader = 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 main

import (
"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 :=
for {
inputString, readErr := inputReader.ReadString('\n')
if readErr == io.EOF { //表示读取到文件末尾
return
}
i++ //行数
//打印每行的行号和内容
fmt.Printf("%d %s\n", i, inputString)
}
}

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

package main

import (
"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 main

import (
"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 main

import (
"bufio"
"fmt"
"os"
"strconv"
) func testWriteFile() {
file, err := os.OpenFile("testWriteFile.txt", os.O_WRONLY|os.O_CREATE, )
if err != nil {
fmt.Println("open file error:", err)
return
}
defer file.Close()
for i := ; i < ; i++ {
file.WriteString("hello " + strconv.Itoa(i) + "\n")
}
} func testWriteBufio() {
file, err := os.OpenFile("testWriteBufio.txt", os.O_WRONLY|os.O_CREATE, )
if err != nil {
fmt.Println("open file error;", err)
return
}
defer file.Close() bufioWriter := bufio.NewWriter(file)
for i := ; i < ; i++ {
bufioWriter.WriteString(strconv.Itoa(i) + "hello\n")
}
bufioWriter.Flush() } func main() {
testWriteFile()
testWriteBufio()
}

关于拷贝文件的例子:

package main

import (
"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, )
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 main

import (
"flag"
"fmt"
) var (
conf string
level int
) func init() {
flag.StringVar(&conf, "c", "/Users/myname/", "请指定配置文件路径")
flag.IntVar(&level, "l", , "请指定日志级别")
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

golang之终端操作,文件操作的更多相关文章

  1. GO语言的进阶之路-Golang字符串处理以及文件操作

    GO语言的进阶之路-Golang字符串处理以及文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道Golang是一门强类型的语言,相比Python在处理一些并发问题也 ...

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

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

  3. Golang字符串处理以及文件操作

    一.整数 1.int与uint的初值比较以及其大小. 1 /* 2 #!/usr/bin/env gorun 3 @author :xxxx 4 Blog:http://www.cnblogs.com ...

  4. golang基础知识之文件操作

    读取文件所有内容以及获得文件操作对象 package mainimport ( "bufio" "fmt" "io" "io/io ...

  5. python 文件操作: 文件操作的函数, 模式及常用操作.

    1.文件操作的函数: open("文件名(路径)", mode = '模式', encoding = "字符集") 2.模式: r , w , a , r+ , ...

  6. python字典操作+文件操作+函数

    师从百测besttest今天老牛教了些函数调用的知识,布置了个作业如下: # 1.写一个商品管理的小程序# 2.商品存在文件里面# 1.添加商品# 输入产品名称.颜色.价格# 要校验商品是否存在,价格 ...

  7. Python学习—基础篇之文件操作

    文件操作 文件操作也是编程中需要熟练掌握的技能,尤其是在后台接口编写和数据分析过程中,对各种类型的文件进行操作,获取文件信息或者对信息进行存储是十分重要的.本篇博客中将主要对常见的文本格式文件和Exc ...

  8. C#基础精华04(文件流,文件操作,File、Directory、Path,Directory)

    文件流 FileStream  可读可写  大文件  释放 StreamReader 读取   释放 StreamWriter 写入   释放 using 中释放 File 可读可写  小文件 操作文 ...

  9. python【第二篇】列表、元组、字典及文件操作

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

  10. Python【第二课】 字符串,列表,字典,集合,文件操作

    本篇内容 字符串操作 列表,元组操作 字典操作 集合操作 文件操作 其他 1.字符串操作 1.1 字符串定义 特性:不可修改 字符串是 Python 中最常用的数据类型.我们可以使用引号('或&quo ...

随机推荐

  1. Unity3D for VR 学习(7): 360°全景照片

    在VR应用中,有一个相对简单的虚拟现实体验,那就是360°全景照片浏览器, 他可以使得手机拍照的”全景”照片,  得以”恢复”当时拍照的场景全貌,  这个创意的确比单纯的2d图片更有震撼力一些,故本文 ...

  2. msf下的LNK漏洞(CVE-2017-8464)利用

    0x01 前言 RCE漏洞存在于Windows处理LNK文件的环节.攻击者利用漏洞可以获得与本地用户相同的用户权限.被使用此漏洞攻击时,用户权限较少的账户相较管理员权限的用户受到的影响更小. 攻击者可 ...

  3. MySQL数据库中tinyint字段值为1,读取出来为true的问题

    原文:https://blog.csdn.net/shuyou612/article/details/46788475 MySQL数据库中tinyint字段值为1,读取出来为true的问题   今天在 ...

  4. git untrack file

    git update-index should do what you want This will tell git you want to start ignoring the changes t ...

  5. poj 1743 后缀数组 最长不重叠子串

    Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 30941   Accepted: 10336 D ...

  6. Qt ------ 获取 wifi 信息

    QProcess:可以调用外部进程 netsh wlan show interfaces:可以查看连接哪个wifi netsh wlan show networks:显示所有可用的wifi netsh ...

  7. oracle导入提示IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件

    oracle导入提示:IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件IMP-00000: 未成功终止导入 解决办法:用户缺少导入权限,授予用户导入权限grant imp_ful ...

  8. HDU6130 签到题 打表

    LINK 题意:给出一个描述自身的数列,求出第n项 思路:看了很久题目才看懂..每个值其实是描述一个分组中的个数,把两个数列对照一下就可以了,那么一个指针扫,同时向尾部加数,构造个数组就行了.其实很水 ...

  9. [转] Linux下程序的加载、运行和终止流程

    TAG: linux, main, _start DATE: 2013-08-08 原文地址: http://blog.csdn.net/tigerscorpio/article/details/62 ...

  10. 78.PL和PS通过BRAM交互共享数据

    本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将结果 ...