前段时间一直在找工作,比较颓废,很长时间都没有更新博客了,最近公司的项目需要用到Python语言和Go语言, 所以又重新学习了一下Python语言和Go语言,现在做一些总结,方便以后复习使用,同时也给其他初学Python语言和Go语言的同行一些参考。
目录
Python%E5%92%8CGo%E8%AF%AD%E8%A8%80%E7%9A%84%E7%AE%80%E8%A6%81%E4%BB%8B%E7%BB%8D-toc" style="margin-left:200px;"> 1.Java、Python和Go语言的简要介绍
Python%E5%92%8CGo%E8%AF%AD%E8%A8%80%E8%B7%A8%E5%B9%B3%E5%8F%B0%E6%94%AF%E6%8C%81%E6%96%B9%E9%9D%A2%E7%9A%84%E5%AF%B9%E6%AF%94-toc" style="margin-left:200px;">2. Java、Python和Go语言跨平台支持方面的对比
Python%E5%92%8CGo%E8%AF%AD%E8%A8%80%E7%9A%84%E7%BC%96%E8%AF%91%E5%92%8C%E6%9E%84%E5%BB%BA%E5%B7%A5%E5%85%B7%E5%AF%B9%E6%AF%94-toc" style="margin-left:200px;">3. Java、Python和Go语言的编译和构建工具对比
4. 性能调优和优化方面
5. 测试框架方面
6.各语言的数据类型与变量声明的差异
7.各语言空值与空类型的表示
8.各语言声明函数方法和控制结构的差异
9. 各语言的异常与错误处理方式
10 .循环结构和迭代的差异
11. 字符串处理
12 .1 数组与切片
12. 2 各语言的List的对比
12.3 各语言Set的对比
13. 映射(map)与字典
14. 对象与类
15. 包导入的对比
16 .注释的对比
17. 数学运算和数值类型
18. 日期和时间的处理
19. 文件IO操作
20. 网络编程
21. 并发模型
22. 可拓展化和模块化
23. 内存管理和垃圾回收
24 .web应用方面
25. 应用安全认证与授权方面
26. ORM(对象关系映射)操作方面
27 .Json数据处理方面
28. xml数据格式的处理
1.Java、Python和Go语言的简要介绍
语言 | 简介 |
---|---|
Java | Java是一种跨平台的面向对象编程语言,由Sun Microsystems公司于1995年推出。它的设计目标是“一次编写,到处运行”,即具有跨平台、可移植性的特点。Java拥有强大的生态系统和丰富的库,广泛用于企业级应用开发、移动应用开发等领域。 |
Python | Python是一种简单易学、功能强大的高级编程语言,由Guido van Rossum于1991年创建。它具有清晰简洁的语法和丰富的标准库,被广泛应用于Web开发、科学计算、人工智能等领域。Python支持多种编程范式,包括面向对象、函数式编程等。 |
Go | Go是由Google开发的一种静态类型、编译型、并发性强的编程语言,于2009年发布。Go语言具有简洁的语法、高效的并发模型和内建的垃圾回收器,适用于构建高性能、可靠、可维护的软件系统。Go语言被广泛应用于云计算、网络编程、分布式系统等领域。 |
Python%E5%92%8CGo%E8%AF%AD%E8%A8%80%E8%B7%A8%E5%B9%B3%E5%8F%B0%E6%94%AF%E6%8C%81%E6%96%B9%E9%9D%A2%E7%9A%84%E5%AF%B9%E6%AF%94">2. Java、Python和Go语言跨平台支持方面的对比
特性 | Java | Python | Go |
---|---|---|---|
跨平台性 | Java 通过 JVM 实现跨平台 | Python 通过解释器实现跨平台 | Go 通过编译器和标准库实现跨平台 |
可执行文件 | Java 程序需要在特定平台上运行 JVM | Python 程序需要在特定平台上运行解释器 | Go 可以编译为特定平台的可执行文件 |
原生支持 | Java 语言本身没有提供原生支持 | Python 语言本身没有提供原生支持 | Go 语言提供原生支持,不需要依赖外部库 |
库和框架 | Java 生态系统提供丰富的跨平台库和框架 | Python 生态系统提供丰富的跨平台库和框架 | Go 生态系统提供丰富的跨平台库和框架 |
Python%E5%92%8CGo%E8%AF%AD%E8%A8%80%E7%9A%84%E7%BC%96%E8%AF%91%E5%92%8C%E6%9E%84%E5%BB%BA%E5%B7%A5%E5%85%B7%E5%AF%B9%E6%AF%94">3. Java、Python和Go语言的编译和构建工具对比
特性 | Java | Python | Go |
---|---|---|---|
编译方式 | 使用 javac 编译器 | 使用 CPython 解释器 | 使用 Go 编译器 |
构建工具 | 使用 Maven、Gradle 等进行项目构建 | 使用 setuptools、pip 等进行包管理和构建 | 使用 Go 工具链中的 go build、go install 等进行项目构建 |
依赖管理 | 使用 Maven、Gradle 等进行 依赖管理,依赖配置文件为pom.xml或者build.gradle | 使用 pip 进行依赖管理,通过requirements.txt文件管理依赖, 使用pip install命令安装依赖 | 使用 Go Modules 进行依赖管理,通过go.mod文件管理依赖,使用go mod命令安装依赖 |
打包方式 | 打包为 JAR 文件 | 打包为 egg、wheel 等 | 打包为可执行文件 |
4. 性能调优和优化方面
特性 | Java | Python | Go |
---|---|---|---|
性能调优工具 | 使用 Profiler、JVisualVM 等进行性能分析 | 使用 Profiler、CProfile 等进行性能分析 | 使用 Profiler、pprof 等进行性能分析 |
内存管理 | 使用 JVM 参数进行堆内存设置和垃圾回收调优 | 使用内存管理工具进行内存分析和调优 | 使用 Go 内建的垃圾回收器进行内存管理和调优 |
并发性能 | 使用线程池和并发集合进行性能优化 | 使用多进程和协程进行性能优化 | 使用 Go 协程和通道进行并发编程和性能优化 |
网络性能 | 使用 NIO 进行非阻塞网络编程和性能优化 | 使用异步框架和非阻塞 IO 进行性能优化 | 使用并发模型和轻量级网络库进行性能优化 |
5. 测试框架方面
特性 | Java | Python | Go |
---|---|---|---|
测试框架 | JUnit、TestNG 等 | unittest、pytest 等 | testing、testify 等 |
断言库 | 使用 assert 关键字进行断言 | 使用 assert 语句进行断言 | 使用 testing 包提供的断言函数 |
测试运行器 | 使用 java 命令行或 IDE 运行测试 | 使用 unittest 模块或命令行运行测试 | 使用 go test 命令行或 IDE 运行测试 |
测试报告 | 可以生成详细的测试报告 | 可以生成详细的测试报告 | 可以生成简单的测试报告 |
6.各语言的数据类型与变量声明的差异
特性 | Java | Python | Go |
---|---|---|---|
类型系统 | 静态类型系统 | 动态类型系统 | 静态类型系统 |
变量声明 | 使用关键字 int , String 等声明;示例:int num=10 | 使用关键字 var 或直接赋值声明;示例:num=10 | 使用关键字 var 或类型名称声明; 示例: var num int=10或者num :=10 |
类型推断 | 不支持类型推断 | 支持类型推断 | 支持类型推断 |
零值 | 有明确的零值 | 不明确的零值 | 有明确的零值 |
7.各语言空值与空类型的表示
特性 | Java | Python | Go |
---|---|---|---|
空值 | 使用 null 表示空值 | 使用 None 表示空值 | 使用 nil 表示空值 |
空类型 | 无 | 无 | 使用 nil 表示空类型 |
空安全 | 需要显式检查空值,否则可能引发空指针异常 | 需要显式检查 None ,否则可能引发 NoneType 错误 | 需要显式检查 nil ,否则可能引发空指针异常 |
8.各语言声明函数方法和控制结构的差异
特性 | Java | Python | Go |
---|---|---|---|
函数声明 | 使用关键字 public 或 private | 无需关键字声明,使用 def | 使用关键字 func |
返回多个值 | 不支持返回多个值 | 支持直接返回多个值,使用元组 | 支持直接返回多个值,函数签名指定多个返回类型 |
控制结构 | 使用 {} 包围代码块 | 使用缩进表示代码块 | 使用 {} 包围代码块 |
函数(方法)声明示例 | public int add(int a,int b){ return a+b; } | def add(a,b): return a+b | func add(a,b int) int { return a+b } |
函数调用 | int result = add(3, 5); | result = add(3, 5) | result := add(3, 5) |
默认参数 | 不支持 | 支持 | 支持 |
可变参数 | 支持 | 支持 | 支持 |
可变参数示例 | | | |
匿名函数 | 不支持 | 支持 | 支持 |
闭包 | 不支持 | 支持 | 支持 |
控制结构 | if-else、switch-case、for、while 等 | if-else、for、while 等 | if-else、for、switch-case 等 |
9. 各语言的异常与错误处理方式
特性 | Java | Python | Go |
---|---|---|---|
异常类型 | Checked 异常和 Unchecked 异常 | 内置异常类型和自定义异常 | 错误类型 |
异常捕获 | 使用 try-catch-finally 语句捕获异常 | 使用 try-except-else-finally 语句捕获异常 | 使用 defer-recover 捕获错误 |
异常抛出 | 使用 throw 关键字抛出异常 | 使用 raise 关键字抛出异常 | 使用 errors.New() 函数抛出错误 |
异常链 | 可以将异常链起来,形成异常链 | 可以将异常链起来,形成异常链 | Go 不支持异常链 |
自定义异常 | 可以自定义异常类 | 可以自定义异常类 | Go 不支持自定义异常类 |
代码示例: | | | |
10 .循环结构和迭代的差异
特性 | Java | Python | Go |
---|---|---|---|
for 循环 | for (int i = 0; i < 5; i++) {...} | for i in range(5): ... | for i := 0; i < 5; i++ {...} |
foreach 循环 | for (String item : list) {...} | for item in list: ... | for _, item := range list {...} |
while 循环 | while (condition) {...} | while condition: ... | for condition {...} |
do-while 循环 | 支持 | 不支持 | 不支持 |
迭代器 | 使用 Iterator 接口进行迭代 | 使用 for...in 循环或迭代器 | 使用 range 关键字进行迭代 |
嵌套循环 | 支持多层嵌套循环 | 支持多层嵌套循环 | 支持多层嵌套循环 |
代码示例 | | | |
11. 字符串处理
特性 | Java | Python | Go |
---|---|---|---|
字符串类型 | String 类型 | 字符串是基本类型 | 字符串是基本类型 |
字符串声明 | String str = "hello"; | str = "hello" | str := "hello" |
字符串连接 | String result = str1 + str2; | result = str1 + str2 | result := str1 + str2 |
字符串长度 | int length = str.length(); | length = len(str) | length := len(str) |
子串提取 | String sub = str.substring(2, 5); | sub = str[2:5] | sub := str[2:5] |
字符串拼接 | String result = String.join("-", strs); | result = "-".join(strs) | result := strings.Join(strs, "-") |
字符串查找 | int index = str.indexOf("o"); | index = str.find("o") | index := strings.Index(str, "o") |
字符串替换 | String newStr = str.replace("old", "new"); | new_str = str.replace("old", "new") | newStr := strings.Replace(str, "old", "new", -1) |
字符串分割 | String[] parts = str.split(","); | parts = str.split(",") | parts := strings.Split(str, ",") |
12 .1 数组与切片
特性 | Java | Python | Go |
---|---|---|---|
数组声明 | int[] arr = new int[5]; | arr = [1, 2, 3, 4, 5] | var arr [5]int |
切片声明 | 不适用 | 不适用 | slice := []int{1, 2, 3, 4, 5} |
长度固定 | 是 | 否 | 否 |
长度可变 | 否 | 是 | 是 |
访问元素 | int element = arr[0]; | element = arr[0] | element := slice[0] |
切片操作 | 不适用 | sub_slice = slice[1:3] | subSlice := slice[1:3] |
添加元素 | 不适用 | slice.append(6) | slice = append(slice, 6) |
删除元素 | 不适用 | del slice[2] | slice = append(slice[:2], slice[3:]...) |
12. 2 各语言的List的对比
特性 | Java | Python | Go |
---|---|---|---|
数据结构 | ArrayList、LinkedList 等 | List(内置类型) | 切片(slice) |
动态大小 | 是 | 是 | 是 |
内存管理 | 由JVM自动管理内存 | 由Python解释器自动管理内存 | 由Go运行时自动管理内存 |
元素类型 | 可以是任意Java对象类型 | 可以是任意Python对象类型 | 可以是任意Go语言类型 |
迭代器 | 使用 Iterator 进行迭代 | 使用 for 循环或迭代器进行迭代 | 使用 for range 循环进行迭代 |
切片 | 不支持 | 不支持 | 内置类型为切片,类似动态数组 |
列表推导式 | 不支持 | 支持 | 不支持 |
代码示例 | | | |
12.3 各语言Set的对比
特性 | Java | Python | Go |
---|---|---|---|
数据结构 | HashSet、TreeSet 等 | set(内置类型) | map[key]struct{}(模拟 set) |
动态大小 | 是 | 是 | 是 |
内存管理 | 由JVM自动管理内存 | 由Python解释器自动管理内存 | 由Go运行时自动管理内存 |
元素类型 | 可以是任意Java对象类型 | 可以是任意Python对象类型 | 可以是任意Go语言类型 |
元素唯一性 | 是 | 是 | 是 |
操作方式 | 使用 add()、remove()、contains() 等方法 | 使用 add()、remove()、in 运算符等方法,可以进行交集、并集、差集等常见的集合操作 | 使用 map 的键值对操作 |
遍历 | 使用迭代器或 foreach 循环进行遍历 | 使用 for 循环或迭代器进行遍历 | 使用 for range 循环或键值对遍历 |
集合推导式 | 不支持 | 不支持 | 不支持 |
代码示例 | | | |
注意:Python中创建一个空集合(Set)必须用 set() 而不是 { },因为 { } 是用来创建一个空字典
13. 映射(map)与字典
特性 | Java | Python | Go |
---|---|---|---|
映射声明 | 使用 Map 接口及实现类 | 使用字典(dict) | 使用映射(map) |
声明与初始化 | Map<String, Integer> map = new HashMap<>(); | map = {} | map := make(map[string]int) |
添加键值对 | map.put("key", value); | map["key"] = value | map["key"] = value |
获取键值对 | int value = map.get("key"); | value = map["key"] | value := map["key"] |
删除键值对 | map.remove("key"); | del map["key"] | delete(map, "key") |
键的遍历 | 使用 Map.keySet() 或 Map.entrySet() 方法 | 使用 for key in dict: 或 for key, value in dict.items(): | 使用 for key, value := range map {} |
14. 对象与类
特性 | Java | Python | Go |
---|---|---|---|
类声明 | 使用关键字 class | 使用关键字 class | 使用关键字 type 或 struct |
对象实例化 | ClassName obj = new ClassName(); | obj = ClassName() | var obj ClassName 或 obj := ClassName{} |
方法声明 | 在类中声明方法,使用关键字 public 、private | 在类中声明方法,无需关键字 | 在结构体中声明方法,使用关键字 func |
继承 | 使用 extends 关键字 | 使用括号表示基类,如 class SubClass(BaseClass): | 使用匿名字段表示组合,如 type SubClass struct { BaseClass } |
多态 | 支持 | 支持 | 不直接支持,但可以通过接口实现多态 |
15. 包导入的对比
特性 | Java | Python | Go |
---|---|---|---|
导入方式 | 使用 import 关键字 | 使用 import 关键字 | 使用 import 关键字 |
导入路径 | 使用完整的包路径,如 import java.util.ArrayList; | 直接指定包名,如 import numpy | 使用相对或绝对路径,如 import "fmt" |
别名导入 | 不支持 | 支持 | 支持 |
16 .注释的对比
特性 | Java | Python | Go |
---|---|---|---|
单行注释 | 使用 // 或 /* */ | 使用 # 或 ''' ''' | 使用 // 或 /* */ |
多行注释 | 使用 /* */ | 使用 ''' ''' | 使用 /* */ |
文档注释 | 使用特定格式的注释,如 Javadoc | 使用特定格式的注释,如 docstrings | 支持在函数或方法前使用注释说明 |
17. 数学运算和数值类型
特性 | Java | Python | Go |
---|---|---|---|
数值类型 | 整数、浮点数、双精度浮点数等 | 整数、浮点数 | 整数、浮点数 |
运算符 | + , - , * , / , % 等 | + , - , * , / , // , % 等 | + , - , * , / , % 等 |
整数除法 | 会保留整数部分,不会自动转换为浮点数 | 结果为浮点数 | 结果为整数 |
类型转换 | 需要显式转换 | 自动进行类型转换 | 需要显式转换 |
数学函数 | 提供 Math 类和相关方法 | 提供 math 模块和相关函数 | 提供 math 包和相关函数 |
18. 日期和时间的处理
特性 | Java | Python | Go |
---|---|---|---|
日期时间类 | java.util.Date , java.time.* 等 | datetime 模块 | time 包 |
日期时间格式化 | 使用 SimpleDateFormat 类进行格式化 | 使用 strftime() 函数进行格式化 | 使用 time.Format() 方法进行格式化 |
日期时间解析 | 使用 SimpleDateFormat 类进行解析 | 使用 strptime() 函数进行解析 | 使用 time.Parse() 方法进行解析 |
时间戳 | 使用 System.currentTimeMillis() 获取毫秒级时间戳 | 使用 time.time() 获取秒级时间戳 | 使用 time.Now().Unix() 获取秒级时间戳 |
时区处理 | 使用 java.time.ZoneId 和 java.time.ZonedDateTime | 使用 pytz 库或 datetime 类的 tzinfo 属性 | 使用 time.LoadLocation() 和 time.In() 方法 |
19. 文件IO操作
特性 | Java | Python | Go |
---|---|---|---|
文件读取 | 使用 FileInputStream 或 BufferedReader | 使用 open() 函数 | 使用 os.Open() 函数 |
文件写入 | 使用 FileOutputStream 或 BufferedWriter | 使用 open() 函数 | 使用 os.Create() 函数 |
文件关闭 | 需要显式调用 close() 方法关闭文件流 | 使用 with 语句自动关闭文件 | 使用 defer 关键字延迟关闭文件 |
文件路径操作 | 使用 java.nio.file.Path 类进行路径操作 | 使用 os.path 模块进行路径操作 | 使用 path/filepath 包进行路径操作 |
文件权限 | 使用 File 类和 setWritable() , setReadable() 方法 | 使用 os.chmod() 函数设置文件权限 | 使用 os.Chmod() 函数设置文件权限 |
20. 网络编程
特性 | Java | Python | Go |
---|---|---|---|
客户端套接字 | 使用 Socket 类和 ServerSocket 类进行套接字编程 | 使用 socket 模块进行套接字编程 | 使用 net 包进行套接字编程 |
服务器套接字 | 使用 ServerSocket 类进行服务器套接字编程 | 使用 socket 模块进行服务器套接字编程 | 使用 net 包进行服务器套接字编程 |
HTTP请求 | 使用 HttpURLConnection 类进行HTTP请求 | 使用 requests 库进行HTTP请求 | 使用 net/http 包进行HTTP请求 |
HTTP服务器 | 使用 HttpServer 类进行HTTP服务器搭建 | 使用 http.server 模块进行HTTP服务器搭建 | 使用 net/http 包进行HTTP服务器搭建 |
WebSocket | 使用第三方库或框架进行WebSocket编程 | 使用第三方库进行WebSocket编程 | 使用 github.com/gorilla/websocket 包进行WebSocket编程 |
21. 并发模型
特性 | Java | Python | Go |
---|---|---|---|
并发模型 | 使用线程或者 Executor 框架 | 使用 threading 模块或 asyncio | 使用 Go 协程和通道 |
同步机制 | 使用 synchronized 关键字或 java.util.concurrent 包提供的同步机制 | 使用互斥锁和条件变量 | 使用 sync 包提供的锁和通道 |
原子操作 | 使用 Atomic 类或 java.util.concurrent.atomic 包提供的原子操作 | 使用 multiprocessing 模块或原子操作 | 使用原子函数和原子类型 |
22. 可拓展化和模块化
特性 | Java | Python | Go |
---|---|---|---|
模块化系统 | 使用 module-info.java 文件和 JPMS 规范 | 使用模块和包管理器 | 使用包和模块化文件 |
模块定义 | 使用 module 关键字定义模块 | 使用 __init__.py 文件定义模块 | 使用 package 和 import 关键字定义模块 |
模块导入 | 使用 import 关键字导入模块 | 使用 import 语句导入模块 | 使用 import 关键字导入包 |
可见性 | 使用 exports 关键字指定模块导出的包 | 使用 __all__ 变量指定模块导出的成员 | 使用首字母大小写控制导出成员的可见性 |
23. 内存管理和垃圾回收
特性 | Java | Python | Go |
---|---|---|---|
内存管理 | 由 JVM 进行自动内存管理 | 由解释器进行自动内存管理 | 使用垃圾收集器进行自动内存管理 |
垃圾回收机制 | 使用标记-清除算法和其他算法 | 使用引用计数和垃圾收集器 | 使用标记-清除算法和其他算法 |
24 .web应用方面
特性 | Java | Python | Go |
---|---|---|---|
Web 框架 | Spring Boot、Servlet、JSP、Struts 等 | Django、Flask、FastAPI 等 | Gin、Echo、Beego、Martini 等 |
路由和中间件 | 使用 Spring MVC 等框架进行路由和中间件处理 | 使用 Django 或 Flask 中间件进行路由和中间件处理 | 使用 Gin 或 Echo 中间件进行路由和中间件处理 |
数据库连接 | 使用 JDBC 连接数据库 | 使用 ORM 框架如 Django ORM 连接数据库 | 使用原生 SQL 或 ORM 框架连接数据库 |
模板引擎 | 使用 JSP、Thymeleaf 等模板引擎 | 使用 Django 自带的模板引擎或 Jinja2 模板引擎 | 使用 HTML 模板或第三方模板引擎 |
异步处理 | 支持使用 CompletableFuture 进行异步处理 | 支持使用异步框架如 asyncio 进行异步处理 | 支持使用 goroutine 和通道进行异步处理 |
WebSocket | 支持使用 Spring WebSocket 进行 WebSocket 开发 | 支持使用第三方库进行 WebSocket 开发 | 支持使用第三方库如 gorilla/websocket 进行 WebSocket 开发 |
RESTful API | 支持使用 Spring MVC 进行 RESTful API 开发 | 支持使用 Django REST framework 进行 RESTful API 开发 | 支持使用第三方库如 Gin 或 Echo 进行 RESTful API 开发 |
25. 应用安全认证与授权方面
特性 | Java | Python | Go |
---|---|---|---|
认证框架 | Spring Security;Shiro | Django Authentication Framework | Gin-OAuth2、Flask-OAuthlib 等 |
认证方式 | 基于用户名密码、OAuth2、LDAP 等 | 基于用户名密码、OAuth2、社交认证等 | 基于用户名密码、OAuth2、JWT 等 |
授权框架 | Spring Security;Shiro | Django Authorization Framework | Casbin、Go-Authorization 等 |
授权方式 | 基于角色、权限、RBAC 等 | 基于角色、权限、RBAC 等 | 基于角色、权限、RBAC 等 |
第三方认证 | 支持第三方认证如OAuth2、LDAP 等 | 支持第三方认证如OAuth2、社交认证等 | 支持第三方认证如OAuth2、JWT 等 |
单点登录 | 支持单点登录 | 支持单点登录 | 支持单点登录 |
26. ORM(对象关系映射)操作方面
特性 | Java | Python | Go |
---|---|---|---|
主要框架 | Hibernate、MyBatis、Spring Data JPA 等 | Django ORM、SQLAlchemy 等 | GORM、XORM 等 |
数据库支持 | 支持各种关系型数据库如MySQL、Oracle等 | 支持各种关系型数据库如MySQL、PostgreSQL等 | 支持各种关系型数据库如MySQL、PostgreSQL等 |
数据模型定义 | 使用注解或XML文件定义实体类和数据库表映射关系 | 使用类和元类定义模型类和数据库表映射关系 | 使用结构体和标签定义实体类和数据库表映射关系 |
查询语言 | 使用HQL(Hibernate Query Language)进行查询 | 使用Django ORM提供的QuerySet进行查询 | 使用原生SQL或链式查询进行查询 |
事务处理 | 支持使用注解或编程式事务管理进行事务处理 | 支持使用装饰器或上下文管理器进行事务处理 | 支持使用事务处理函数进行事务处理 |
缓存支持 | 支持二级缓存和查询缓存 | 支持查询缓存 | 支持缓存查询结果和预编译查询 |
迁移和数据填充 | 支持数据库迁移和数据填充工具 | 支持数据库迁移和数据填充工具 | 支持数据库迁移和数据填充工具 |
27 .Json数据处理方面
特性 | Java | Python | Go |
---|---|---|---|
JSON 库 | Jackson、Gson 、FastJson等 | json 模块、第三方库如 simplejson 等 | encoding/json、第三方库如 jsoniter 等 |
JSON 解析 | 使用 ObjectMapper 类解析 JSON 数据 | 使用 json 模块解析 JSON 数据 | 使用 json 包或第三方库解析 JSON 数据 |
JSON 序列化 | 使用 ObjectMapper 类将对象序列化为 JSON 字符串 | 使用 json 模块将对象序列化为 JSON 字符串 | 使用 json 包或第三方库将对象序列化为 JSON 字符串 |
JSON 对象 | 使用 JsonObject、JsonArray 等类表示 JSON 对象 | 使用 dict、list 等数据结构表示 JSON 对象 | 使用 map、slice 等数据结构表示 JSON 对象 |
JSON 格式化 | 可以格式化 JSON 字符串输出 | 可以格式化 JSON 字符串输出 | 可以格式化 JSON 字符串输出 |
错误处理 | 提供异常机制进行错误处理 | 可以使用异常机制或返回 None 进行错误处理 | 提供错误返回值或错误接口进行错误处理 |
代码示例 | | | |
28. xml数据格式的处理
特性 | Java | Python | Go |
---|---|---|---|
XML 库 | DOM、SAX、JAXB、Dom4j 等 | xml.etree.ElementTree、lxml 等 | encoding/xml、第三方库如 xmlpath 等 |
XML 解析 | 使用 DOM 解析器或 SAX 解析器进行解析 | 使用 ElementTree 模块进行解析 | 使用 encoding/xml 包进行解析 |
XML 生成 | 使用 DOM 或 JAXB 进行 XML 文档的生成 | 使用 ElementTree 模块进行 XML 文档的生成 | 使用 encoding/xml 包进行 XML 文档的生成 |
XPath 支持 | 支持使用 XPath 进行 XML 查询和遍历 | 不支持 XPath,但可以使用 ElementTree 模块进行遍历 | 支持使用 XPath 进行 XML 查询和遍历 |
命名空间支持 | 支持处理 XML 命名空间 | 支持处理 XML 命名空间 | 支持处理 XML 命名空间 |
错误处理 | 提供异常机制进行错误处理 | 可以使用异常机制或返回 None 进行错误处理 | 提供错误返回值或错误接口进行错误处理 |
代码示例 | | | |
今天就先总结这些,以后学习中遇到了其他的,再增加调整 ,文中的代码示例由于在表格中看起来比较拥挤,有种乱码的既视感,不过直接点击复制到对应IDE编辑器或者文本编辑器中是完整的,不会乱码。