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)
}

关于文件读写
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=内容 ,就可以用我们通过命令行参数传入的值进行处理

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 本文主要介绍了Go语言中文件读写的相关操作。 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集...
    吴佳浩阅读 391评论 0 4
  • 文件的打开和关闭 os包中提供了方法叫做Open,就是专门用于打开某一个文件的 注意点:如果文件不存在不会自动创建...
    AuglyXu阅读 1,392评论 0 6
  • 本文主要介绍了Go语言中文件读写的相关操作。 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集...
    雪上霜阅读 175评论 0 0
  • 打开、创建文件 创建文件 Createfile, err := os.Create("F:/futureWeb/g...
    梁坤同学阅读 927评论 0 0
  • Go语言操作文件 文件的打开与关闭 文件的打开在Go语言的os包中提供了一个函数, 叫做Open, 就是专门用于打...
    喝酸奶要舔盖__阅读 205评论 0 0