#### Go 命令行参数,JSON 序列,反序列化这一节来学习一下Go 如果解析命令行参数,以及JSON 的序列化及反序列化;  命令行参数对于熟悉Linux 的同学来说比较清楚,如: ls -a , wc -l ... 其中,-a, -l 都是命令行参数;  JSON 的序列化与反序列化在WEB 开发中很常见的, 这节带领大家学习一下在Go 中如何操作JSON ##### 命令行参数在Go 中os.Args 是一个字符串切片,存储了所有的命令参数
package mainimport ("fmt""os"
)func main(){fmt.Printf("命令行参数有%d个\n",len(os.Args))for i,v := range os.Args {fmt.Printf("当前是第%d个参数,参数是%s\n",i+1,v)}
}

  

##### 使用flag 包来解析命令行参数上面os.Args 是比较原始的方式解析参数,对于带指定的参数形式,就比较吃力了;  使用flag 包可以解决这个问题
package mainimport ("flag""fmt"
)func main()  {var username stringvar password stringvar host stringvar port intflag.StringVar(&username,"u","","database username ,default empty")flag.StringVar(&password,"p","","database password,default empty")flag.StringVar(&host,"h","","database host,default empty")flag.IntVar(&port,"port",3306,"database host port,default 3306")flag.Parse()fmt.Printf("username=%s\n",username)fmt.Printf("password=%s\n",password)fmt.Printf("host=%s\n",host)fmt.Printf("username=%s\n",username)fmt.Printf("port=%d\n",port)// ./main.exe -u root -p 1201 -h 127.0.0.1 -port 33306//username=root//password=1201//host=127.0.0.1//username=root//port=33306
}

  

##### JSON 序列化JSON 的全称为JavaScript Object Notation ,它是一种轻量级的数据交换格式;  在JS 中一切皆对象,所以任何的数据类型都可以用JSON 来表示: 如Go 中的字符串,数组,切片,map,结构体等;  JSON 的序列化是指将有key-value 结构的数据类型(如结构体,map,切片)序列化成JSON 字符串的操作
package mainimport ("encoding/json""fmt"
)// 如果需要序列化后的key 名自定义,需要使用tag
type Person struct {Name string `json:"username"`Age  int    `json:"person_age"`// 对于结构体内不能导出字段// 首字母小写的// 无法序列化extra string
}
func marshal(data interface{}) {body, err := json.Marshal(data)if err != nil {fmt.Println(err)fmt.Println("序列化失败")return}fmt.Print("序列化后的数据为:")fmt.Println(string(body))}
func structToJSON() {person := Person{"Tom",21,"i want be a teacher"}marshal(person)// {"username":"Tom","person_age":21}
}
func mapToJSON() {person := make(map[string]interface{})person["name"] = "Jack"person["age"] = 20person["extra"] = "i want play game"marshal(person) // {"age":20,"extra":"i want play game","name":"Jack"}
}
func sliceToJSON(){person := make([]string,0)person = append(person,"Tom")person = append(person,"Jack")person = append(person,"hey")marshal(person) // ["Tom","Jack","hey"]
}
func main() {structToJSON()mapToJSON()sliceToJSON()
}

  

##### JSON 反序列化JSON 反序列化是指将 JSON 字符串序列化成对应的数据类型(结构体,map,切片)的操作
package mainimport ("encoding/json""fmt"
)func unmarshalMap(){str := `{"name":"tom","age":21,"extra":"i am english teacher"}`var person map[string]interface{}err := json.Unmarshal([]byte(str),&person)if err != nil {fmt.Println("JSON 反序列化失败")fmt.Println(err)return}fmt.Print("序列化的结果为:")fmt.Println(person) //map[age:21 extra:i am english teacher name:tom]
}
func unmarshalSlice(){str := `["tom","jack","hey","joy"]`var person []stringerr := json.Unmarshal([]byte(str),&person)if err != nil {fmt.Println("JSON 反序列化失败")fmt.Println(err)return}fmt.Print("序列化的结果为:")fmt.Println(person) //[tom jack hey joy]
}func unmarshalStruct(){str := `{"name":"tom","age":21,"extra":"i am english teacher"}`var person struct{Name stringAge int// 反序列化也一样,如果是不可导出字段// 则不能反序列化extra string}err := json.Unmarshal([]byte(str),&person)if err != nil {fmt.Println("JSON 反序列化失败")fmt.Println(err)return}fmt.Print("序列化的结果为:")fmt.Println(person) //{tom 21 }
}
func main(){unmarshalMap()unmarshalStruct()unmarshalSlice()
}

  最新文章在个人微信公众号,欢迎关注, 一同交流学习;

转载于:https://www.cnblogs.com/Mail-maomao/p/11555161.html

Go 命令行参数,JSON 序列化与反序列化相关推荐

  1. 在Visual Studio中使用命令行参数进行调试

    我正在Visual Studio中开发一个C ++命令行应用程序,需要使用命令行参数进行调试. 目前我只使用我需要的参数(如此program.exe -file.txt )运行生成的EXE文件,但这样 ...

  2. JSON序列化和反序列化还有这种玩法

    Mixin对于前端开发者可不陌生,Vue.React等知名前端框架都使用了Mixin.而对于后端开发,尤其是Java后端开发来说Mixin却是一个很陌生的概念.今天来我们通过Jackson让后端开发者 ...

  3. consul 命令行参数

    Consul(https://www.consul.io/downloads.html)是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置共享.与其他分布式服务注册与发现的方案 ...

  4. .NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]...

    较之传统通过App.config和Web.config这两个XML文件承载的配置系统,.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命令行参 ...

  5. Go test 命令行参数

    转自:<Go专家编程>Go test 命令行参数 前言 go test有非常丰富的参数,一些参数用于控制测试的编译,另一些参数控制测试的执行. 有关测试覆盖率.vet和pprof相关的参数 ...

  6. pytest合集(3)— 命令行参数

    1.命令行参数大全 使用 pytest -h 可以查看 pytest 的命令行参数,有 10 大类共 132 个. 详见:Python pytest 132 个命令行参数用法 - 习久性成 - 博客园 ...

  7. .NET Reactor使用教程(11)——命令行参数:保护设置

    本篇文章主要介绍.NET Reactor的命令行参数中的保护设置. 参数 描述 反篡改   -antitamp [1/0] 此选项可防止受保护的程序集被黑客工具篡改. [1] = Enable [0] ...

  8. 从源码的角度看Go语言flag库如何解析命令行参数!

    我上周五喝酒喝到晚上3点多,确实有点罩不住啊,整个周末都在休息和睡觉,文章鸽了几天,想不到就有两个人跑了. 不得不感叹一下,自媒体的太残酷了,时效就那么几天,断更就没人爱.你们说好了爱我的,爱呢?哼 ...

  9. kubelet 命令行参数

    本文采用1.16的kubelet 参数类型 kubelet的参数在加载过程中一种是通过命令行直接加载,一种是通过–config指定一个配置文件 然后去加载,一种是已经弃用 或者是在未来版本中会弃用的参 ...

最新文章

  1. 2022-2028年中国侧线油行业市场研究及前瞻分析报告
  2. 新的UWP和Win32应用程序分发模型
  3. Input.GetAxis
  4. Windows Phone 7 XNA开发之关于图形的配置
  5. 如何更改vs默认调试浏览器
  6. Active Directory边界
  7. Mybatis入门 使用注解
  8. css段落文字(中英文混杂)实现两端对齐
  9. LeetCode 1190. 反转每对括号间的子串(栈)
  10. CRM 4.0得到用户个人信息
  11. 用winformz时间格式不正确_煮八爪鱼,有人用冷水,有人用开水,大厨:都不对,教你正确做法...
  12. 20190313_C#反转绘制字符串
  13. VMware 安装 CentOS 7
  14. C#正则表达式快速入门
  15. Android主板串口线接法,9针rs232串口接线图以及接线方法
  16. 计算机信息安全专业代码0839,网络安全/信息安全专业大学排名(2017-2018-安全导航)...
  17. java jbutton数组_java-JButton需要显示图像数组
  18. 通过NAT64实现ipv6 client 访问ipv4 Server
  19. JAVA钓鱼游戏_java实现小猫钓鱼游戏
  20. HTML5 页面制作工具

热门文章

  1. mysql的driver和url_数据库连接driverClass和jdbcUrl大全
  2. Springboot整合redis(lettuce)
  3. 队列的链式存储和实现(C语言)【队列】(8)
  4. python程序控制结构_python程序控制结构
  5. 【干货】路由黑洞的5种解决方法大PK
  6. 【实验】如何实现远程同一网段互通?
  7. 「更高更快更稳」,看阿里巴巴如何修炼容器服务「内外功」
  8. 阿里云李响荣获 2020 中国开源杰出贡献人物奖,我们找他聊了聊开源和云原生
  9. java静态路由_Linux添加静态路由两种实现方法解析
  10. 引入mysql+命名空间_C#连接MySQL操作详细教程