首页 > 其他分享 >序列化与反序列化(GO)

序列化与反序列化(GO)

时间:2024-05-28 13:11:27浏览次数:25  
标签:err fmt JSON Person json GO 序列化

GO序列化与反序列化

定义

序列化:把对象转化为可传输的字节序列的过程称为序列化

反序列化:把字节序列还原为对象的过程称为反序列化。

--

作为开发者,序列化和反序列化一直是我们老生常谈的问题,也是非常琐碎但是重要的知识点。对于序列化与反序列化,我这里强烈推荐一篇博客,你可以从中更加深入了解他们。

这里作为待补充部分,后面学习完RPC后会重新更新这部分内容。

这里仅提供go中最简单的序列化方式:

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	// 创建一个 Person 结构体实例
	person := Person{Name: "Alice", Age: 30}

	// 将 Person 结构体序列化为 JSON 格式的字节切片
	jsonBytes, err := json.Marshal(person)
	if err != nil {
		fmt.Println("Failed to serialize:", err)
		return
	}

	// 打印 JSON 字符串
	fmt.Println("Serialized JSON:", string(jsonBytes))

	// 将 JSON 字符串反序列化为 Person 结构体
	var newPerson Person
	err = json.Unmarshal(jsonBytes, &newPerson)
	if err != nil {
		fmt.Println("Failed to deserialize:", err)
		return
	}

	// 打印反序列化后的 Person 结构体
	fmt.Println("Deserialized Person:", newPerson)
}

结果

Serialized JSON: {"name":"Alice","age":30}
Deserialized Person: {Alice 30}

标签:err,fmt,JSON,Person,json,GO,序列化
From: https://www.cnblogs.com/atongmuhao/p/18217738

相关文章

  • Go实战全家桶之九:统一网关
    开源:https://gitee.com/ichub/gocenter.git代码:配置:gateway:bypass:-path:/goauth/login-path:/goauth/logoutroutes:-path:/datadictserviceId:web.platform.com-path:/deptempserviceId:web.platform.com-p......
  • go timer
    Timer的创建Timer是一次性的时间触发事件,这点与Ticker不同,后者则是按一定时间间隔持续触发时间事件。Timer常见的使用场景如下:场景1:t:=time.AfterFunc(d,f)场景2:select{casem:=<-c:handle(m)case<-time.After(5*time.Minute):fmt.Pri......
  • 【转载】从零开始的硬件之路14:解决AD工程文件过大问题及运行AD插件导入Logo
    原文链接:https://zhuanlan.zhihu.com/p/397285331 这篇讲两个内容,分别是”解决AD工程文件过大问题“和”运行AD插件导入图形符号“。目录:AD工程文件过大问题运行AD插件导入Logo首先何为工程文件过大,来图直接说明:可以看到一个工程文件占用了两百多的内存(我以前的一个......
  • Red is good
    Description桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。Input一行输入两个数R,B,其值在0到5000之间Output在最优策略下平均能得到多少钱。解析设计状态:\(f[i]......
  • Django 接收用户请求并通过HTTP回应
    准备工作python版本:3.10(本人的)Django版本:3.2.12(LTS长期支持版)注意:不同Django所对应的python版本是有要求的,建议事先查找自己的python版本,Django建议下载LTS长期支持版的安装:python3 //查看版本(在window用python命令)sudopip3installdjango[版......
  • 【解决办法】RegularPolygon.__init__() takes 3 positional arguments but 4 were gi
    我在学习用Python绘制一个六边形且隐藏全部轴脊的代码时,出现如下报错:RegularPolygon._init_()takes3positionalargumentsbut4weregiven报错意思:RegularPolygon.__init__()接受3个位置参数,但给定了4个通过上网查询、询问同学,我解决了这个问题,其中的解决过程我详细地......
  • golang为什么chan大部分是发送结构体,而不是其它比如string
     typetokenstruct{}typeGroupstruct{cancelfunc(error)wgsync.WaitGroupsemchantokenerrOncesync.Onceerrerror}func(g*Group)done(){ifg.sem!=nil{<-g.sem}g.wg.Done()}在Go语言中,通道(......
  • golang的交叉编译是什么
     Go(Golang)的交叉编译是指在一种硬件架构或操作系统环境下,使用Go编译器生成适用于另一种架构或操作系统的可执行程序。Go语言的设计使得交叉编译变得非常简单和高效,它允许开发者在开发环境中构建目标平台上的代码,而无需在目标平台上实际运行编译过程。 在Go中,交叉编译主要涉......
  • golang的 CGO 是什么
     CGO是Go(Golang)语言中的一个工具,全称为"C-Go"或者"CforGo"。它是Go标准库的一部分,允许Go代码与C语言代码进行交互。CGO提供了在Go程序中使用C语言库的能力,同时也允许C代码调用Go的函数。通过CGO,开发者可以利用Go语言的强类型和垃圾回收等特性,同时利用C语言的高性能和广......
  • Go 运算符与表达式
    Go运算符与表达式上一篇:Go基本数据类型下一篇:Go控制结构文章目录Go运算符与表达式前言一运算符二算术运算符2.1算术运算符案例三赋值运算符四比较运算符五逻辑运算符六位运算符七表达式与表达式求值总结前言在上一篇,我们介绍了Go提供的基本类......