终端读写

操作终端相关文件句柄常量

os.Stdin:标准输入

os.Stdout:标准输出

os.Stderr:标准错误输出

终端读写实例:

package main

import (
"fmt"
) var (
firstName, lastName, s string
i int
f float32
input = "greg / 20 / 0.8"
format = "%s / %d / %f"
) type student struct {
Name string
Age int
Score float32
} 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, &s, &i, &f)
fmt.Println("From the string we read: ", s, i, f) //greg 20 0.8 var str = "greg 18 89.92"
var stu student
fmt.Sscanf(str, "%s %d %f", &stu.Name, &stu.Age, &stu.Score)
fmt.Println(stu)
}

带缓冲区的读写:

package main

import (
"bufio"
"fmt"
"os"
) var inputReader *bufio.Reader
var input string
var err error func main() {
inputReader = bufio.NewReader(os.Stdin)
reader := bufio.NewReader(os.Stdin)
fmt.Println(">>>Please enter: ") str, err := reader.ReadString('\n')
if err != nil {
fmt.Println("read string failed, err:", err)
return
}
fmt.Printf(">>>reader:%s\n", str) input, err = inputReader.ReadString('\n')
if err == nil {
fmt.Printf(">>>readstring:%s\n", input)
}
}

终端读文件

package main

import (
"bufio"
"fmt"
"os"
) func main() {
file, err := os.Open("D:/123.txt")
if err != nil {
fmt.Println("read file err:", err)
return
}
defer file.Close() reader := bufio.NewReader(file)
str, err := reader.ReadString('\n')
if err != nil {
fmt.Println("read string failed, err:", err)
return
} fmt.Printf("read str succ, ret:%s\n", str)
}

终端写文件

从终端读取一行字符串,统计英文、数字、空格以及其他字符的数量。

package main

import (
"bufio"
"fmt"
"io"
"os"
) type CharCount struct {
ChCount int
NumCount int
SpaceCount int
OtherCount int
} func main() {
file, err := os.Open("D:/id_sra")
if err != nil {
fmt.Println("read file err:", err)
return
}
defer file.Close() var count CharCount reader := bufio.NewReader(file)
for {
str, err := reader.ReadString('\n')
if err == io.EOF {
break
}
if err != nil {
fmt.Printf("read file failed, err:%v", err)
break
} runeArr := []rune(str)
for _, v := range runeArr {
switch {
case v >= 'a' && v <= 'z':
fallthrough
case v >= 'A' && v <= 'Z':
count.ChCount++
case v == ' ' || v == '\t':
count.SpaceCount++
case v >= '0' && v <= '9':
count.NumCount++
default:
count.OtherCount++
}
}
} fmt.Printf("char count:%d\n", count.ChCount)
fmt.Printf("num count:%d\n", count.NumCount)
fmt.Printf("space count:%d\n", count.SpaceCount)
fmt.Printf("other count:%d\n", count.OtherCount)
}

文件读取

os.File封装所有文件相关操作,os.Stdin,os.Stdout, os.Stderr都是*os.File

package main

import (
"bufio"
"fmt"
"io"
"os"
) func main() {
inputFile, err := os.Open("input.txt")
if err != nil {
fmt.Printf("open file err:%v\n", err)
return
}
defer inputFile.Close() inputReader := bufio.NewReader(inputFile)
for {
inputString, readerError := inputReader.ReadString('\n')
if readerError == io.EOF {
return
}
fmt.Printf("The input was: %s", inputString)
}
} greg@greg:day71$ vim input.txt
greg@greg:day71$ go run buffile.go
The input was: 123456
The input was: asdf
The input was: 12390

读取整个文件ioutil

package main

import (
"fmt"
"io/ioutil"
"os"
) func main() {
inputFile := "input.txt"
outputFile := "input_copy2.txt"
buf, err := ioutil.ReadFile(inputFile)
if err != nil {
fmt.Fprintf(os.Stderr, "File Error: %s\n", err)
return
} fmt.Printf("%s\n", string(buf))
err = ioutil.WriteFile(outputFile, buf, 0755)
if err != nil {
panic(err.Error())
}
}

读取压缩文件gz

package main

import (
"bufio"
"compress/gzip"
"fmt"
"os"
)
func main() {
fName := "MyFile.gz"
var r *bufio.Reader
fi, err := os.Open(fName)
if err != nil {
fmt.Fprintf(os.Stderr, "%v, Can’t open %s: error: %s\n", os.Args[0], fName, err)
os.Exit(1)
} defer fi.Close() fz, err := gzip.NewReader(fi)
if err != nil {
fmt.Fprintf(os.Stderr, "open gzip failed, err: %v\n", err)
return
}
r = bufio.NewReader(fz)
for {
line, err := r.ReadString('\n')
if err != nil {
fmt.Println("Done reading file")
os.Exit(0)
}
fmt.Println(line)
}
}

文件写入

os.OpenFile(“output.dat”,  os.O_WRONLY|os.O_CREATE, 0666)
第二个参数:文件打开模式:
os.O_WRONLY:只写
os.O_CREATE:创建文件
os.O_RDONLY:只读
os.O_RDWR:读写
os.O_TRUNC :清空
第三个参数:权限控制:
r ——> 004
w——> 002
x——> 001

文件写入实例

package main

import (
"bufio"
"fmt"
"os"
) func main() {
outputFile, outputError := os.OpenFile("output.dat",
os.O_WRONLY|os.O_CREATE, 0666)
if outputError != nil {
fmt.Printf("An error occurred with file creation\n")
return
} defer outputFile.Close()
outputWriter := bufio.NewWriter(outputFile)
outputString := "hello world!\n"
for i := 0; i < 10; i++ {
outputWriter.WriteString(outputString)
}
outputWriter.Flush()//缓存区写入到磁盘
}

拷贝文件

package main

import (
"fmt"
"io"
"os"
) func main() {
CopyFile("target.txt", "source.txt")
fmt.Println("Copy done!")
} func CopyFile(dstName, srcName string) (written int64, err error) {
src, err := os.Open(srcName)
if err != nil {
return
}
defer src.Close() dst, err := os.OpenFile(dstName, os.O_WRONLY|os.O_CREATE, 0755)
if err != nil {
return
}
defer dst.Close()
return io.Copy(dst, src)
}

命令行参数

os.Args是一个string的切片,用来存储所有的命令行参数

package main

import (
"fmt"
"os"
"strconv"
) func add(m, n int) int {
return m + n
} func sub(m, n int) int {
return m - n
} func comp(m,n int) int {
return m * n
} func div(m,n int) int {
return m/n
} func main() {
funcmap := map[string]func(int, int) int{
"+": add,
"-": sub,
"*":comp,
"/":div,
} m, _ := strconv.Atoi(os.Args[1])
n, _ := strconv.Atoi(os.Args[3]) f := funcmap[os.Args[2]]
if f != nil {
fmt.Println(f(m, n))
}
}

flag包的使用,用来解析命令行参数:

package main

import (
"flag"
"fmt"
) func main() {
var confPath string
var logLevel int
flag.StringVar(&confPath, "c", "", "please input conf path")
flag.IntVar(&logLevel, "d", 10, "please input log level")
flag.Parse()
fmt.Println("path:", confPath)
fmt.Println("log level:", logLevel)
} greg@greg:flag$ ./flag -d 20
path:
log level: 20
greg@greg:flag$ ./flag -d 100 -c /home/greg/go
path: /home/greg/go
log level: 100

带缓冲区的文件读写

package main

import (
"bufio"
"flag"
"fmt"
"io"
"os"
) func cat(r *bufio.Reader) {
for {
buf, err := r.ReadString('\n')
if err == io.EOF {
break
}
fmt.Fprintf(os.Stdout, "%s", buf)
//return
}
} func main(){
flag.Parse()
if flag.NArg() == 0 {
cat(bufio.NewReader(os.Stdin))
}
for i := 0; i < flag.NArg(); i++ {
f, err := os.Open(flag.Arg(i))
fmt.Println(i,f)
if err != nil {
fmt.Fprintf(os.Stderr, "%s:error reading from %s: %s\n",
os.Args[0], flag.Arg(i), err.Error())
}
cat(bufio.NewReader(f))
continue
}
}
/*
greg@greg:bufflag$ ./bufflag a.txt b.txt
0 &{0xc4200640f0}
a
aa
aaa
aaaa
1 &{0xc420064140}
b
bb
bbb
bbbb
*/

带缓冲区的终端读写

package main

import (
"bufio"
"fmt"
"os"
) func main() {
fmt.Fprintf(os.Stdout, "%s\n", "hello world! - unbuffered")
buf := bufio.NewWriter(os.Stdout)
fmt.Fprintf(buf, "%s\n", "hello world! - buffered")
buf.Flush()
}

Go终端读写的更多相关文章

  1. go 终端读写、文件读写

    go 终端读写 操作终端相关文件句柄常量 os.Stdin:标准输入 os.Stdout:标准输出 os.Stderr:标准错误输出 示例: package main import ( "b ...

  2. Go 终端读写 && 文件读写、copy

    终端读写 操作终端相关文件句柄常量 os.Stdin(standard):标准输入 os.Stdout:标准输出 os.Stderr:标准错误输出 标准输出 demo:直接输出和 判断之后输出的结果不 ...

  3. linux shell 之终端读写文件数据流和重定向>,<,<<,>>

    终端实现文件中数据流的读写: 重定向命令列表如下: 命令 说明 command > file 将输出重定向到 file.将终端数据写到文件file中 command < file 将输入重 ...

  4. Go语言学习之7 接口实例、终端文件读写、异常处理

    本节主要内容: 1. 终端读写2. 文件读写3. 命令行参数4. Json5. 自定义错误 1. 终端读写 操作终端相关文件句柄常量    os.Stdin:标准输入    os.Stdout:标准输 ...

  5. Go语言系列(七)- 读写操作

    终端读写 1. 终端读写 操作终端相关文件句柄常量 os.Stdin:标准输入 os.Stdout:标准输出 os.Stderr:标准错误输出 2. 终端读写示例 package main impor ...

  6. Golang之文件读写

    读写文件,不添加文件路径,默认写入到GOPATH路径下 终端读写: 源码 func Sscanf func Sscanf(str string, format string, a ...interfa ...

  7. golang(7):文件读写 & json & 错误处理

    终端读写 操作终端相关文件句柄常量 os.Stdin // 标准输入 os.Stdout // 标准输出 (输出到终端) os.Stderr // 标准错误输出 (输出到终端) fmt 常见用法 fm ...

  8. C语言学习002:第一个完整的C程序代码

    #include <stdio.h>//引用相关的外部库,stdio.h包含了终端读写数据的代码 //程序入口,程序通过main函数的返回值判断程序是否运行成功,0表示成功,非0表示程序运 ...

  9. computer专业术语总结

    计算机专业真可谓是博大精深,光语言就有N多种,而且各种算法计数,各个领域,加之新技术的不断出现, 如果想要穷尽 计算机的知识,那绝对是不那个可能的,只能在若干领域才能取得一定的成果,但是多了解一些专业 ...

随机推荐

  1. Spring学习日志之Spring MVC启动配置

    对DispatcherServlet进行配置 Spring MVC的配置实际上就是对DispatcherServlet的配置 public class DispatcherServletConfig ...

  2. day1 基础

    1.python 简介 一.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的 ...

  3. 解决CSS垂直居中的几种方法(基于绝对定位,基于视口单位,Flexbox方法)

    在CSS中对元素进行水平居中是非常简单的:如果它是一个行内元素,就对它的父元素应用 text-align: center ;如果它是一个块级元素,就对它自身应用 margin: auto.然而如果要对 ...

  4. js动态生成二维码

    一.使用jquery.qrcode生成二维码 1.首先在页面中加入jquery库文件和qrcode插件 <script type="text/javascript" src= ...

  5. tree conflict svn 怎么解决

    如果自己和其他人修改了同一个文件,而他已经更新到SVN,你commit时就会出现冲突,如何解决呢? 方法/步骤 使用SVN时,更新一个自己修改的文件到服务器,出现冲突,因为其他同事也修改了这个文件并且 ...

  6. android 基础04-BroadCastReceiver

    Android 系统中的广播(BroadCast) 是组件与组件进行的一种可跨线程的通信方式.类似于 广播者-订阅者(publish-subscribe) 的实现,当系统或者某个应用的状态发生改变时, ...

  7. MySQL Block Nested Loop and Batched Key Access Joins(块嵌套循环和批量Key访问连接)

    Block Nested-Loop and Batched Key Access Joins Batched Key Access (BKA) Join算法通过index和join buffer访问j ...

  8. windows下搭建virtualenv虚拟环境

    操作系统:windows7 旗舰版 64bit pip install django==1.9.1pip install virtualenv 虚拟环境工具>pip install virtua ...

  9. 【笔记】vue-cli 打包后路径问题出错的解决方法

    几天之前打包自己的vue 项目上传到远程服务器上面 但是遇到了如下几个问题: 1. 线上浏览页面时是空白页面 2. 打包后资源文件(js, css 文件)引用的路径不正确 3. 开发环境中使用到的如: ...

  10. 使用Recovery Services备份Azure ARM模式虚拟机

    1.需要事先准备好要备份的虚拟机,如"hlmcent73n" 2.创建一个恢复服务保管库 3.选择虚拟机类型的备份 4.可以选择默认备份策略,也可以选择新建备份策略,以下演示为新建 ...