学习记录:go语言中读写文件的小练习

明述道长 · · 2584 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

package main

import (
	"os"
	"fmt"
	"bufio"
	"strings"
	"strconv"
)

func main() {
	f, _:=os.OpenFile("a.txt", os.O_RDONLY, 0666)
	defer f.Close()
	m:=bufio.NewReader(f)
	char:=0
	words:=0
	lines:=0
	for{
		s, ok:=m.ReadString('\n')
		fmt.Println(s)
		char+=len(s)
		words+=len(strings.Fields(s))
		lines++
		if  ok!=nil{
			break
		}
	}
	fmt.Println("char:"+toString(char)+",words:"+toString(words)+",lines:"+toString(lines))
}
func toString(a interface{}) string{
	
	 if  v,p:=a.(int);p{
	 	return strconv.Itoa(v)
	 }
	
	if v,p:=a.(float64);  p{
	 return strconv.FormatFloat(v,'f', -1, 64)
	}
	
	if v,p:=a.(float32); p {
		return strconv.FormatFloat(float64(v),'f', -1, 32)
	}
	
	 if v,p:=a.(int16); p { 
	 	return strconv.Itoa(int(v))
	 }
	  if v,p:=a.(uint); p { 
	 	return strconv.Itoa(int(v))
	 }
	  if v,p:=a.(int32); p { 
	 	return strconv.Itoa(int(v))
	 }
	return "wrong"
}

程序的主要目的是读取某文件,输出到屏幕,并输出其中字数,单词数,行数,这是一个来自《学习go语言》的练习题。

f, _:=os.OpenFile("a.txt", os.O_RDONLY, 0666)这一句是建立一个到a.txt的只读的文件流(其实我问高手说叫文件资源句柄。我觉得好像流更好理解,就姑且让我用流来描述)。

defer f.Close() 用到的是go语言中的压后语句defer,确保在此函数结束后关闭流f。

m:=bufio.NewReader(f)在f流外面包一层用来读的缓冲管道,形成新的缓冲流m。

s, ok:=m.ReadString('\n') m读取文件,读到'\n'时停下来,返回之前读到的string

strings.Fields(s) 把s根据空白字符进行分割,得到一个字符串数组还是slice切片?(恩恩,这点没搞清楚,应该是切片,看来还得回去学习。。)

 


有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:明述道长

查看原文:学习记录:go语言中读写文件的小练习

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2584 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传