2022/02/11   //舒适的环境很难培养出坚强的品格,被安排好的人生也很难做出伟大的事业package mainimport ("encoding/json""fmt"
)type Monster struct {Name     string `json:"name"`Age      intBirthday stringSal      float64Skill    string
}/*func Marshal(v interface{}) ([]byte, error)Marshal函数返回v的json编码。反序列化一个json字符串时,确保反序列化后的数据类型和原来序列化前的数据类型一致
*/func testStruct() {/*1.把结构体序列化*/monster := Monster{Name:     "牛魔王",Age:      500,Birthday: "20220211",Sal:      1000.0,Skill:    "牛魔拳",}data, err := json.Marshal(monster)if err != nil {fmt.Println("序列化错误", err)}fmt.Println(string(data))//data是序列化的格式,接下来把data反序列化/*2.把结构体反序列化*/var monster2 Monstererr2 := json.Unmarshal(data, &monster2)if err2 != nil {fmt.Println("反序列化失败", err)return}fmt.Println("反序列化成功")fmt.Println(monster2)
}func testMap() {/*2.将map序列化*///var myMap map[string]interface{}myMap := make(map[string]interface{})myMap["name"] = "红孩儿"myMap["age"] = 100myMap["Birthday"] = "20000"myMap["Sal"] = 100.5data, err := json.Marshal(myMap)if err != nil {fmt.Println("序列化错误", err)}fmt.Println(string(data))//data是序列化的格式,接下来把data反序列化/*2.把map反序列化反序列化不需要make() 因为Unmarshal()已经封装好了可以查看go手册 Unmarshal()方法*/var myMap2 map[string]interface{}err2 := json.Unmarshal(data, &myMap2)if err2 != nil {fmt.Println("反序列化失败", err)return}fmt.Println("反序列化成功")fmt.Println(myMap2)
}func testSlice() {/*3.将切片序列化*/var slice []map[string]interface{}map1 := make(map[string]interface{})map1["name"] = "map1"map1["age"] = 10map1["Birthday"] = "1002"map1["Sal"] = "map1~"map2 := make(map[string]interface{})map2["name"] = "map2"map2["age"] = 10map2["Birthday"] = [2]string{"1003", "qweqw"}map2["Sal"] = "map1~"slice = append(slice, map1)slice = append(slice, map2)data, err := json.Marshal(slice)if err != nil {fmt.Println("序列化错误", err)}fmt.Println(string(data))/*3.将切片反序列化*/var slice2 []map[string]interface{}err2 := json.Unmarshal(data, &slice2)if err2 != nil {fmt.Println("反序列化失败", err)return}fmt.Println("反序列化成功")fmt.Println(slice2)
}func main() {testStruct()testMap()testSlice()
}
//cal_test.go包package main
/*
规则1.单元测试代码的go文件必须以_test.go结尾,Go语言测试工具只会认符合这个规则的文件规则2.单元测试的函数名必须以Test开头,是可导出公开的函数。备注:函数名最好是Test+要测试的方法函数名规则3. 测试函数的签名必须接收一个指向testing.T类型的指针作为参数,并且该测试函数不能返回任何值
*/import ("testing"
)//编写测试用例,去测试addUpper()是否正确
//命令台指令补充//直接测试所有文件函数// go test -v//测试单个函数//go test -v  -run  测试函数名字//测试单个文件//go test -v  xxx_test.go  xxx.gofunc TestAddUpper(t *testing.T) {//调用res := addUpper(11)if res != 55 {t.Fatalf("结果错误,期望值%v, 实际%v", 55, res)}//如果正确输出日志t.Logf("执行正确!")
}func TestGetSum(t *testing.T) {//调用res := getSum(11, 12)if res != 2223 {t.Fatalf("结果错误,期望值%v, 实际%v", 23, res)}//如果正确输出日志t.Logf("执行正确!")//测试单个函数//go test -v  -run  测试函数名字//测试单个文件//go test -v  xxx_test.go  xxx.go
}
//cal.go包package mainfunc addUpper(n int) int {res := 0for i := 1; i <= n-1; i++ {res += i}return res
}func getSum(n1 int, n2 int) int {return n1 + n2
}

GO语言学习之路20相关推荐

  1. 12天学好C语言——记录我的C语言学习之路(Day 12)

    12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有 ...

  2. Go语言学习之路(二)

    Go语言学习之路(二) 面对对象编程思想 抽象 封装 继承 接口 文件 命令行参数 Json 序列化 反序列化(unmarshal) 单元测试 Redis Redis简介 Redis基本使用 Go连接 ...

  3. C语言-学习之路-01

    C语言学习之路-01 目录 关键字 数据类型 常量 变量 声明和定义 进制 sizeof关键字 整型:int short.int.long.long long 字符型:char ASCII对照表 转义 ...

  4. C语言学习之路--计算机系统组成以及工作原理,进制之间的转换和机器数及其表示范围

    目录 一.前言 二.计算机系统组成以及工作原理简介 1.硬件系统基本组成原理及工作原理 2.硬件各部分详解 1.运算器 2.控制器 CPU 3.存储器 1.内存储器 2.外存储器 3.拓展 4.存储器 ...

  5. Go语言学习之路——Go语言简介

    本文首发于我的博客 很多人将GO语言称为21世纪的C语言,因为GO不仅拥有C的简洁和性能,而且还很好的提供了21世纪互联网环境下服务端开发的各种实用特性,让开发者在语言级别就可以方便的得到自己想要的东 ...

  6. C语言学习之路--函数,从知识到实战

    目录 一.前言 二.函数是什么? 三.C语言中函数的分类 1.库函数 1.为什么会有库函数? 2.如何学习库函数? 3.学习库函数举例 1.strcpy 2.memset 3.库函数学习工具总结 2. ...

  7. GO语言学习之路13

    2022/02/04package mainimport ("fmt""sort" )/*map是key-value数据结构,又称为字段或者关联数组,类似其他编 ...

  8. GO语言学习之路10

    2022/02/01package mainimport ("fmt""strconv""strings" )//1.字符串中常用的系统函数 ...

  9. C语言学习之路--C语言中的格式输出

    一.前言 在我们初学C语言的过程中,会有一些类似%d之类的格式输出,我在此做个汇总,供大家学习. 二.分类 1.%u 十进制无符号整数. 2.%f 表示输出浮点数. 可以通过输出格式说明符来指定精确到 ...

最新文章

  1. python行为识别_牛!Python 也能实现图像姿态识别溺水行为了
  2. redis集群扩容和缩容_深入理解Redis Cluster集群
  3. 线程池原理与自定义线程池
  4. multipartfile前端怎么传_前端那些事如何更好管理 Api 接口
  5. android listview item 展开动画,android的ListView点击item使item展开的做法的实现代码
  6. HyperLPR中文车牌识别
  7. python 存储文件 文件名乱码_python打开中文文件名乱码怎么办
  8. 6亿融资,今麦郎有底气上市吗?
  9. arcgis的重采样和插值方法
  10. Linux运维职业困惑?给你史上最全互联网Linux工作规划!
  11. 一张图解释DNS域名服务器的作用
  12. html 登录页面模板
  13. TCP局域网服务器简易搭建(eps-01s)
  14. 开启Intel VT-x虚拟化
  15. VC++操作Excel生成饼状图!
  16. 三阶线性自抗扰控制matlab实现
  17. 从MUD到MMO——虚拟世界发展简史以及未来可能性的杂谈
  18. 小米汽车发售,竟然不到5000元,年轻人的第一辆汽车!
  19. 01.git团队协作
  20. mysql的下载与安装

热门文章

  1. 在K3凭证处理中的部份实用操作
  2. 2.6 相对和绝对路径 2.7 cd命令 2.8 创建和删除目录mkdir/rmdir 2.9 rm命令
  3. Eclipse中Build Workspace 优化
  4. 【Win 10 应用开发】导入.pfx证书
  5. 面试题30.最小的k个数
  6. 使用ImageMagick和Tesseract进行简单数字图像识别
  7. CSS3控制背景图片大小
  8. 【POJ】1276 Cash Machine 【背包问题】
  9. 计算色光叠加的RGB颜色的alpha值
  10. 我的CSDN资源下载怎么被自动设置了积分