【Golang】✔️走进 Go 语言✔️ 第二十二课 json & 文件读写
【摘要】
【Golang】✔️走进 Go 语言✔️ 第二十二课 json & 文件读写
概述json编码解码
文件读写文件读取写入文件
概述
Golang 是一个跨平台的新生编程语言...
概述
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)