Go语言头秃之路(五)
更新系列
Go语言头秃之路(零)
Go语言头秃之路(一)
Go语言头秃之路(二)
Go语言头秃之路(三)
Go语言头秃之路(四)
Go语言头秃之路(六)
Go语言头秃之路(七)
- 文件操作
输入流:文件 -> 程序
输出流:程序 -> 文件打开文件:os.OpenFile(filename, open_mode, perm)
其中文件权限perm只在Linux适用,同Linux文件权限,比如0666表示所有人/所属组/其他人都拥有读写缺陷。
打开模式open_mode如下,详见官文 - Constantsconst (
O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
O_RDWR int = syscall.O_RDWR // 读写模式打开文件
O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
O_CREATE int = syscall.O_CREAT // 如果不存在将创建一个新文件
O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必须不存在
O_SYNC int = syscall.O_SYNC // 打开文件用于同步I/O
O_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件
)在缓冲区读取/写入:
reader := bufio.NewReader(*File)
text := reader.ReadString(’\n’)
表示到\n为结束读取符
writer := bufio.NewWriter(*File)
writer.WriteString(string)
writer.Flush()
写入缓冲区,最后需要Flush才能写入文件
饭粒:package mainimport ("os""fmt""bufio""io" )func main() {filePath := "e:/Go/hsp/abc.txt"file, err := os.OpenFile(filePath, os.O_RDWR | os.O_APPEND, 0666)if err != nil {fmt.Println("open err:", err)return}defer file.Close()reader := bufio.NewReader(file)for {content, err := reader.ReadString('\n')if err == io.EOF {fmt.Println("文件读取完毕。")break}fmt.Print(content)}// 以缓冲区写入writer := bufio.NewWriter(file)str := "你好啊 world!!!\r\n"for i:=0;i<5;i++ {writer.WriteString(str)}// 将缓冲区内容写入文件writer.Flush() }
一次性读取所有文件内容
使用io/ioutil
包,打开关闭文件逻辑都已经封装到包里面。
饭粒:拷贝文件package mainimport ("fmt""io/ioutil" )func main() {fileSource := "e:/Go/hsp/abc.txt"fileDist := "e:/Go/hsp/dd.txt"// 一次性读取所有文件内容data, err1 := ioutil.ReadFile(fileSource)if err1 != nil {fmt.Println("read err:", err1)}err2 := ioutil.WriteFile(fileDist, data, 0666)if err2 != nil {fmt.Println("write err:", err2)} }
json
- 序列化
json.Marshal
序列化结构体时,最好传入地址,即前面加上&
给结构体字段设置标签tag:json:"标签名"
常用于序列化操作。
package mainimport ("fmt""encoding/json" )type Company struct {Name string `json:"name"` // 给结构体字段设置标签tagAge int `json:"age,omitempty"` // omitempty表示没有值时不赋零值staff_num int `json: "StaffNum,string"` // 这样生成的json对象中,age就为字符串Address string `json: "-"` // 不需要进行序列化 }func main() {c1 := Company{"yyfax", 6}fmt.Println(c1)cJson, _ := json.Marshal(c1)fmt.Println(string(cJson)) }
- 反序列化
json.Unmarshal(data []byte, v interface{})func UnSeliaMap(strJson string) {var map1 map[string]interface{}// 这里不需要进行make() json.Unmarshal方法内部以封装make操作err3 := json.Unmarshal([]byte(strJson), &map1)if err3 != nil {fmt.Println("err:", err3)return}fmt.Println("反序列化map结果:", map1) }
注意:
- 在反序列化一个json字符串时,要确保反序列化后的数据类型和原来序列化钱的数据类型一致;
- 如果json字符串是自定义的,需要对"进行转义;如果json字符串时通过程序获取到的,则不需要进行转义。
- 序列化
号外
package mainimport ("fmt""reflect" )const tagName = "Testing"type Info struct {Name string `Testing:"-"`Age int `Testing:"age,min=17,max=60"`Sex string `Testing:"sex,required"` }func main() {info := Info{Name: "benben",Age: 23,Sex: "male",}//通过反射,我们获取变量的动态类型t := reflect.TypeOf(info)fmt.Println("Type:", t.Name())fmt.Println("Kind:", t.Kind())for i := 0; i < t.NumField(); i++ {field := t.Field(i) //获取结构体的每一个字段tag := field.Tag.Get(tagName)fmt.Printf("%d. %v (%v), tag: '%v'\n", i+1, field.Name, field.Type.Name(), tag)} }
Go语言头秃之路(五)相关推荐
- Go语言头秃之路(零)
更新系列 Go语言头秃之路(一) Go语言头秃之路(二) Go语言头秃之路(三) Go语言头秃之路(四) Go语言头秃之路(五) Go语言头秃之路(六) Go语言头秃之路(七) 先导 指针 指针变量只 ...
- Go语言头秃之路(一)
更新系列 Go语言头秃之路(零) Go语言头秃之路(二) Go语言头秃之路(三) Go语言头秃之路(四) Go语言头秃之路(五) Go语言头秃之路(六) Go语言头秃之路(七) 各种基础语句 cons ...
- Go语言头秃之路(七)
更新系列 Go语言头秃之路(零) Go语言头秃之路(一) Go语言头秃之路(二) Go语言头秃之路(三) Go语言头秃之路(四) Go语言头秃之路(五) Go语言头秃之路(六) 反射 反射可以在运行时 ...
- Go语言头秃之路(三)
更新系列 Go语言头秃之路(零) Go语言头秃之路(一) Go语言头秃之路(二) Go语言头秃之路(四) Go语言头秃之路(五) Go语言头秃之路(六) Go语言头秃之路(七) 数组 定义语法:var ...
- lisp语言与python_又要头秃?2020 年七大 AI 编程语言大盘点
原标题:又要头秃?2020 年七大 AI 编程语言大盘点 本文讲述用于人工智能编程的顶级编程语言,AI工程师和相关从业者可从中选择适合他们项目所需要的语言,你Pick哪个呢? 作者 | Claire ...
- GO语言的进阶之路-协程和Channel
GO语言的进阶之路-协程和Channel 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 看过我之前几篇博客小伙伴可能对Golang语言的语法上了解的差不多了,但是,如果想要你的代码 ...
- python之路day5_Python语言之python之路笔记day19
本文主要向大家介绍了Python语言之python之路笔记day19,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 一.Django请求生命周期 对于所有的web框架来说本质就是 ...
- GO语言的进阶之路-Golang高级数据结构定义
GO语言的进阶之路-Golang高级数据结构定义 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过Golang的基本数据类型,字符串和byte,以及rune也有所了解, ...
- 51单片机C语言程序100例分析(1)IO+C语言+头文件
51单片机C语言程序100例分析(1)IO+C语言+头文件 \\\插播一条:文章末尾有惊喜哟~/// P1=0xfe;//P1=11111110B,即P1.0输出低电平} 分析:通过这短短的几行代码 ...
最新文章
- 客快物流大数据项目(六):Docker与虚拟机的形象比喻及组件介绍
- 范围解析操作符 (::)
- C++ 管理数据内存的方法
- Python获取控制台输入
- canal数据同步(应用场景)
- mysql如何和qt连接使用_Qt5学习:连接MySQL数据库
- kafka分区与分组原理_kafka 基本原理和概念
- 学习笔记--asp.net主题和外观(转自msdn,仅为自己学习存储和有意读者使用)
- Apple Watch新功能曝光:“一键收取”蚂蚁森林能量
- git命令详解( 六 )
- SQL Server 2005混合模式登录配置
- php生成excel完整实例代码,PHP输出Excel实例代码
- CarMaker支持导入的道路格式
- 流程图连接线生成算法
- CSS动画 animation与transition
- 思科三层交换机不同vlan互通_Cisco三层交换机实现不同vlan之间的通信
- python中plot是什么意思_讲述python中ubplot的详细用法
- c语言试题库之单选题
- 22春天津大学《国际金融学》在线作业二
- 2021计算机考试准考证打印入口(附官网网址)