八、golang文本操作、json协议
一、终端读写操作终端相关文件语句常量,go所有的都是接口
os.Stdin:标准输入
os.Stdout:标准输入,只要实现输出这个接口,打印到终端,
os.Stderr:标准错误输出
os.OpenFile(“路径”,模式):打开文件
终端读写实例
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(input,format,&f,&I,&s) //格式化输入
fmt.Printf() //格式化输出
fmt.Sscanf(input,format,&f,&I,&s) //从一个字符串中格式化输入
fmt.Println(“from the we read ”,f,I,s)
}
package main
import
"fmt"
type Student
struct{
Name
string
Age
int
Score float32
}
func main(){
var str ="stu01 18 89.92"
var stu Student
fmt.Sscanf(str,"%s %d %f",&stu.Name,&stu.Age,stu.Score)
fmt.Println(stu)
}
{stu01 18 0}
上面就是把str字符串中的内容格式化输入到了stu这个结构体中
View Code 带缓冲区的读写 从终端去读取数据
首先写道缓冲区里面,然后go或者系统再刷到文件里面,用于提高性能
下面是带缓冲区的读的代码
package main
import (
"bufio"
"os"
"fmt"
)
//注意单引号是byte,双引号等是字符串
func main(){
//首先用到带缓冲区的包bufio,newReader返回一个新的Reader,具有默认大小
reader :=bufio.NewReader(os.Stdin) //参数是接口,这里接口是标准输入
//读包含数据的字符串,包括分隔符,由于上面返回Reader,所以要用Read。。方法读取,参数byte
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)
}
执行结果
D:\project>go build go_dev/day7/example2
D:\project>example2.exe
this is my book yo //手动输入
read str succ ret:this is my book yo
小结:
1)用bufio.NewReader创建一个新的Reader,返回值默认大小的Reader,也就是创建缓冲区然后把文件读入缓冲区
2)然后根据上面的返回值进行Read。。。方法读取,返回错误和读出的数据
3)进行err判断
文件读写
open:返回一个文件用于读取数据
OpenFile:如果需要读写 操作用这个
package main
import (
"os"
"fmt"
"bufio"
)
func main(){
file,err:=os.Open("C:/test.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)
return
}
fmt.Printf("read str succ,ret:%s\n",str)
}
上面程序小结:
1)打开文件,读取内容,判断错误输出
2)defer关闭文件
3)创建缓冲区并且向缓冲区写入文件
4)读取缓冲区数据,并且判断错误输出
练习:从文件中读取一行字符串,统计英文、数字、空格以及其他字符的数量
读取到文件末尾会返回io.EOF这个错误
package main
import(
"fmt"
"os"
"bufio"
"io"
)
type CharCount struct{
ChCount int
NumCount int
SpaceCount int
OtherCount int
}
func main(){
file,err:=os.Open("C:\test")
if err!=nil{
fmt.Println("read file err",err)
return
}
defer file.Close()
var Count CharCount
str:=bufio.NewReader(file) //创造缓冲区
//下面是一行一行的从缓冲区里面读取内容然后统计
for{
str1,err:=str.ReadString('\n')
if err==io.EOF{ //读到文件尾部会返回EOF错误
break
}
if err!=nil { //如果真的出问题打印出来问题
fmt.Println("read str1 fail", err)
return
}
runeArr :=[]rune(str1) //把字符转换成中文的字符数组
for _,v :=range runeArr {
switch {
case v>='a' && v='A' && v='0' && v
页:
[1]