更新系列

Go语言头秃之路(零)
Go语言头秃之路(一)
Go语言头秃之路(二)
Go语言头秃之路(三)
Go语言头秃之路(四)
Go语言头秃之路(六)
Go语言头秃之路(七)


  • 文件操作
    输入流:文件 -> 程序
    输出流:程序 -> 文件

    • 打开文件:os.OpenFile(filename, open_mode, perm)
      其中文件权限perm只在Linux适用,同Linux文件权限,比如0666表示所有人/所属组/其他人都拥有读写缺陷。
      打开模式open_mode如下,详见官文 - Constants

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

      注意:

    1. 在反序列化一个json字符串时,要确保反序列化后的数据类型和原来序列化钱的数据类型一致;
    2. 如果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语言头秃之路(五)相关推荐

  1. Go语言头秃之路(零)

    更新系列 Go语言头秃之路(一) Go语言头秃之路(二) Go语言头秃之路(三) Go语言头秃之路(四) Go语言头秃之路(五) Go语言头秃之路(六) Go语言头秃之路(七) 先导 指针 指针变量只 ...

  2. Go语言头秃之路(一)

    更新系列 Go语言头秃之路(零) Go语言头秃之路(二) Go语言头秃之路(三) Go语言头秃之路(四) Go语言头秃之路(五) Go语言头秃之路(六) Go语言头秃之路(七) 各种基础语句 cons ...

  3. Go语言头秃之路(七)

    更新系列 Go语言头秃之路(零) Go语言头秃之路(一) Go语言头秃之路(二) Go语言头秃之路(三) Go语言头秃之路(四) Go语言头秃之路(五) Go语言头秃之路(六) 反射 反射可以在运行时 ...

  4. Go语言头秃之路(三)

    更新系列 Go语言头秃之路(零) Go语言头秃之路(一) Go语言头秃之路(二) Go语言头秃之路(四) Go语言头秃之路(五) Go语言头秃之路(六) Go语言头秃之路(七) 数组 定义语法:var ...

  5. lisp语言与python_又要头秃?2020 年七大 AI 编程语言大盘点

    原标题:又要头秃?2020 年七大 AI 编程语言大盘点 本文讲述用于人工智能编程的顶级编程语言,AI工程师和相关从业者可从中选择适合他们项目所需要的语言,你Pick哪个呢? 作者 | Claire ...

  6. GO语言的进阶之路-协程和Channel

    GO语言的进阶之路-协程和Channel 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 看过我之前几篇博客小伙伴可能对Golang语言的语法上了解的差不多了,但是,如果想要你的代码 ...

  7. python之路day5_Python语言之python之路笔记day19

    本文主要向大家介绍了Python语言之python之路笔记day19,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 一.Django请求生命周期 对于所有的web框架来说本质就是 ...

  8. GO语言的进阶之路-Golang高级数据结构定义

    GO语言的进阶之路-Golang高级数据结构定义 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过Golang的基本数据类型,字符串和byte,以及rune也有所了解, ...

  9. 51单片机C语言程序100例分析(1)IO+C语言+头文件

    51单片机C语言程序100例分析(1)IO+C语言+头文件 \\\插播一条:文章末尾有惊喜哟~///  P1=0xfe;//P1=11111110B,即P1.0输出低电平} 分析:通过这短短的几行代码 ...

最新文章

  1. 客快物流大数据项目(六):Docker与虚拟机的形象比喻及组件介绍
  2. 范围解析操作符 (::)
  3. C++ 管理数据内存的方法
  4. Python获取控制台输入
  5. canal数据同步(应用场景)
  6. mysql如何和qt连接使用_Qt5学习:连接MySQL数据库
  7. kafka分区与分组原理_kafka 基本原理和概念
  8. 学习笔记--asp.net主题和外观(转自msdn,仅为自己学习存储和有意读者使用)
  9. Apple Watch新功能曝光:“一键收取”蚂蚁森林能量
  10. git命令详解( 六 )
  11. SQL Server 2005混合模式登录配置
  12. php生成excel完整实例代码,PHP输出Excel实例代码
  13. CarMaker支持导入的道路格式
  14. 流程图连接线生成算法
  15. CSS动画 animation与transition
  16. 思科三层交换机不同vlan互通_Cisco三层交换机实现不同vlan之间的通信
  17. python中plot是什么意思_讲述python中ubplot的详细用法
  18. c语言试题库之单选题
  19. 22春天津大学《国际金融学》在线作业二
  20. 2021计算机考试准考证打印入口(附官网网址)

热门文章

  1. 大学excel题库含答案_Excel题库(附答案).doc
  2. 小程序开发遇见的常见问题
  3. [光源频闪] Basler相机光源频闪设置操作说明
  4. 2021“遇见未来”千锋十周年冬令营活动全国四地火热开启
  5. pancakeswap薄饼添加流动性后实现永久锁仓
  6. 要成为一个牛逼程序猿,你要勇于尝试这10种姿势
  7. 柳传志详解联想控股资本棋局:2018年后子公司将分拆上市
  8. 堆的简单应用——TopK
  9. python 优劣解距离法(TOPSIS)
  10. 画一条连接两点的线,由两点坐标确定一条直线