【Golang】✔️走进 Go 语言✔️ 第二十二课 json & 文件读写

举报
我是小白呀iamarookie 发表于 2021/09/10 00:17:47 2021/09/10
【摘要】 【Golang】✔️走进 Go 语言✔️ 第二十二课 json & 文件读写 概述json编码解码 文件读写文件读取写入文件 概述 Golang 是一个跨平台的新生编程语言...

【Golang】✔️走进 Go 语言✔️ 第二十二课 json & 文件读写

概述

Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. (第 22 课)

在这里插入图片描述

json

json (JavaScript Object Notation) 是一种轻量级的数据交换格式.

在这里插入图片描述

编码

格式:

json.Marshal(v interface{})

  
 
  • 1

例子:

package main

import (
	"encoding/json"
	"fmt"
)

func main() {

	type person struct {
		Name string
		Job string
	}

	Bob := person{
		"Bob",
		"掏粪工",
	}

	// 编码
	b, error := json.Marshal(Bob)

	if error != nil {
		fmt.Println(error)
	}

	// 调试输出
	fmt.Println(b)
	fmt.Println(string(b))

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

输出结果:

[123 34 78 97 109 101 34 58 34 66 111 98 34 44 34 74 111 98 34 58 34 230 142 143 231 178 170 229 183 165 34 125]
{"Name":"Bob","Job":"掏粪工"}

  
 
  • 1
  • 2

解码

package main

import (
	"encoding/json"
	"fmt"
)

func main() {

	type person struct {
		Name string
		Job string
	}

	// 转换成json
	var jsonbytes = []byte(`{"Name": "bob","Job": "dancer"}`)
	fmt.Println(jsonbytes)

	// 定义变量p
	var p person
	
	// 解码
	error := json.Unmarshal(jsonbytes, &p)
	if error != nil {
		fmt.Println(error)
	}
	
	// 调试输出
	fmt.Printf("%+v", p)

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

输出结果:

[123 34 78 97 109 101 34 58 32 34 98 111 98 34 44 34 74 111 98 34 58 32 34 100 97 110 99 101 114 34 125]
{Name:bob Job:dancer}

  
 
  • 1
  • 2

文件读写

文件读写是常见的操作. Go 语言提供了多种文本操作的支持.

在这里插入图片描述

文件读取

格式:

ReadAll(r io.Reader) ([]byte, error)

  
 
  • 1

整个文件读取:

package main

import (
	"fmt"
	"io/ioutil"
	"os"
)

func main() {

	// 打开文件
	file, err := os.Open("C:/Users/Windows/Desktop/project2/read_write/read/1.txt")
	fmt.Println(file, err)
    
    // 延时关闭
    defer file.Close()

	// 读取整个文件
	read_bytes, err := ioutil.ReadAll(file)

	// 调试输出
	fmt.Println(string(read_bytes))

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

输出结果:

&{0xc0000da780} <nil>
A
B
C
D

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

按字节读取文件 (panic 用于抛出错误):

package main

import (
	"fmt"
	"io"
	"os"
)

func main() {

	// 打开文件
	file, err := os.Open("C:/Users/Windows/Desktop/project2/read_write/read/1.txt")

	if err != nil {
		panic(err)
	}

	// 延时关闭
	defer file.Close()

	// 创建byte数组用于存放数据
	result := make([]byte, 0)

	// 创建缓冲区
	buffer := make([]byte, 1024)
	for {
		// 读取1kb
		n, err := file.Read(buffer)

		// 错误处理
		if err != nil && err != io.EOF {
			panic(err)
		}

		// 跳出循环
		if 0 == n {
			break
		}

		// append (加上...可以追加数组, 否则只能追加元素)
		result = append(result, buffer[:n]...)
	}

	// 调试输出最终结果
	fmt.Println(string(result))

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

写入文件

格式:

file.Write(f *File) Write(b []byte)

  
 
  • 1

返回值:

  • nums: 写入的字节个数
  • err: 错误

例子:

package main

import (
	"fmt"
	"os"
)

func main() {

	// 定义字符串, 并转换成字节数组
	input := []byte("Hello World")

	// 穿件文件
	file, err := os.Create("1.txt")

	if err != nil {
		panic(err)
	}

	// 延时关闭
	defer file.Close()

	// 写入文件
	nums, err := file.Write(input)

	if err != nil {
		panic(err)
	}

	// 调试输出写入的字节数
	fmt.Println("字节数:", nums)

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

输出结果:

字节数: 11

  
 
  • 1

在这里插入图片描述

文章来源: iamarookie.blog.csdn.net,作者:我是小白呀,版权归原作者所有,如需转载,请联系作者。

原文链接:iamarookie.blog.csdn.net/article/details/119848077

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。