Go 语言与主流编程语言深度对比
企业级技术选型参考手册
目录
- [1. 概述](#1. 概述)
- [2. 语言特性对比](#2. 语言特性对比)
- [3. 性能对比](#3. 性能对比)
- [4. 并发模型对比](#4. 并发模型对比)
- [5. 生态系统与工具链](#5. 生态系统与工具链)
- [6. 应用场景适配性](#6. 应用场景适配性)
- [7. 学习曲线与开发效率](#7. 学习曲线与开发效率)
- [8. 企业采用情况](#8. 企业采用情况)
- [9. 技术选型决策框架](#9. 技术选型决策框架)
- [10. 总结与建议](#10. 总结与建议)
1. 概述
1.1 对比语言范围
| 语言 |
发布年份 |
设计者 |
类型系统 |
编译/解释 |
| Go |
2009 |
Google |
静态类型 |
编译型 |
| Java |
1995 |
Sun/Oracle |
静态类型 |
编译+解释(JVM) |
| Python |
1991 |
Guido van Rossum |
动态类型 |
解释型 |
| Rust |
2010 |
Mozilla |
静态类型 |
编译型 |
| C++ |
1983 |
Bjarne Stroustrup |
静态类型 |
编译型 |
| Node.js (JS/TS) |
2009 |
Ryan Dahl |
动态/静态 |
解释型(V8) |
| Kotlin |
2011 |
JetBrains |
静态类型 |
编译+解释(JVM) |
1.2 核心设计哲学对比
┌─────────────┬────────────────────────────────────────────────┐
│ 语言 │ 设计哲学 │
├─────────────┼────────────────────────────────────────────────┤
│ Go │ 简洁、实用、工程化优先 │
│ Java │ 跨平台、面向对象、企业级稳定性 │
│ Python │ 简洁优雅、开发效率优先、胶水语言 │
│ Rust │ 安全、性能、并发,零成本抽象 │
│ C++ │ 零开销抽象、极致性能控制 │
│ Node.js │ 非阻塞 I/O、事件驱动、全栈 JavaScript │
│ Kotlin │ 现代化 Java、空安全、函数式编程 │
└─────────────┴────────────────────────────────────────────────┘
2. 语言特性对比
2.1 语法简洁性
| 特性 |
Go |
Java |
Python |
Rust |
C++ |
| 关键字数量 |
25 |
67 |
35 |
40+ |
90+ |
| 代码行数(同功能) |
低 |
高 |
最低 |
中 |
高 |
| 格式化工具 |
gofmt(强制) |
无官方 |
black |
rustfmt |
无官方 |
| 类型推断 |
:= |
var (Java 10+) |
无需声明 |
let |
auto (C++11) |
| 错误处理 |
返回值 |
try-catch |
try-except |
Result<T, E> |
异常/错误码 |
| 泛型支持 |
Go 1.18+ |
Java 5+ |
无需(动态) |
完整支持 |
模板 |
代码对比:Hello World
// Go
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
// Java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
# Python
print("Hello, World!")
// Rust
fn main() {
println!("Hello, World!");
}
2.2 类型系统对比
| 特性 |
Go |
Java |
Python |
Rust |
| 类型检查时机 |
编译期 |
编译期 |
运行期 |
编译期 |
| 空值处理 |
零值 |
null |
None |
Option<T> |
| 接口实现 |
隐式实现 |
显式 implements |
鸭子类型 |
Trait 显式实现 |
| 枚举 |
iota 常量 |
enum 类 |
无原生支持 |
代数数据类型 |
| 代数数据类型 |
不支持 |
不支持 |
不支持 |
支持(enum) |
| 模式匹配 |
switch |
switch(有限) |
match |
match(穷尽) |
空值处理对比
// Go:零值机制
var s string // ""
var n int // 0
var b bool // false
var p *int // nil
// Java:null 问题
String s = null; // 可能引发 NullPointerException
// Rust:Option 类型
let s: Option<String> = None;
// 必须显式处理 None 情况
match s {
Some(value) => println!("{}", value),
None => println!("没有值"),
}
2.3 内存管理
| 语言 |
内存管理方式 |
GC 暂停 |
内存安全性 |
| Go |
垃圾回收(三色标记) |
低延迟(<1ms) |
安全 |
| Java |
垃圾回收(多种可选) |
可配置(G1/ZGC) |
安全 |
| Python |
引用计数 + GC |
不可预测 |
安全 |
| Rust |
所有权系统(无 GC) |
无 |
编译期保证 |
| C++ |
手动/智能指针 |
无 GC |
不安全(UB) |
| Node.js |
V8 垃圾回收 |
可配置 |
安全 |
| Kotlin |
JVM 垃圾回收 |
同 Java |
安全 |
3. 性能对比
3.1 基准测试数据
以下数据基于常见基准测试(JSON 序列化、HTTP 服务器、排序算法等),仅供参考。
| 测试场景 |
Go |
Java |
Python |
Rust |
C++ |
Node.js |
| 计算密集型 |
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
| I/O 密集型 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
| 内存效率 |
⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
| 启动速度 |
⭐⭐⭐⭐⭐ |
⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
| 二进制大小 |
中等 |
大(JVM) |
小(解释器大) |
大 |
中等 |
大(V8) |
3.2 内存占用对比
运行简单 HTTP 服务器(处理 1000 并发连接)
Go: ~15 MB
Java: ~150 MB(JVM 启动后)
Python: ~30 MB
Rust: ~5 MB
C++: ~3 MB
Node.js: ~40 MB
3.3 并发性能
10000 并发连接的 Echo Server 吞吐量
Go (goroutine): ~800,000 req/s
Java (Virtual Thread): ~600,000 req/s
Rust (async): ~900,000 req/s
Node.js: ~400,000 req/s
Python: ~20,000 req/s(受 GIL 限制)
3.4 编译速度
| 语言 |
编译速度 |
增量编译 |
热重载 |
| Go |
⭐⭐⭐⭐⭐ 极快 |
支持 |
air 等工具 |
| Java |
⭐⭐⭐ 中等 |
支持 |
JRebel |
| Python |
⭐⭐⭐⭐⭐ 无需编译 |
N/A |
原生支持 |
| Rust |
⭐⭐ 较慢 |
部分支持 |
有限 |
| C++ |
⭐⭐ 较慢 |
CMake |
有限 |
| Node.js |
⭐⭐⭐⭐⭐ 无需编译 |
N/A |
原生支持 |
4. 并发模型对比
4.1 并发模型概览
| 语言 |
并发模型 |
基本单位 |
特点 |
| Go |
CSP(goroutine + channel) |
goroutine |
轻量级协程,原生支持 |
| Java |
线程 + 虚拟线程(21+) |
Thread/Platform Thread |
成熟稳定,生态丰富 |
| Python |
多线程 + 多进程 + asyncio |
Thread/Process/Coroutine |
GIL 限制,async/await |
| Rust |
async/await + Tokio |
Future |
零成本抽象,无 GC |
| C++ |
线程 + 协程(20) |
std::thread |
底层控制,复杂 |
| Node.js |
事件循环 + 回调/Promise |
Event Loop |
单线程,非阻塞 I/O |
| Kotlin |
协程 + 虚拟线程(JVM) |
Coroutine |
结构化并发 |
4.2 并发编程代码对比
Go:goroutine + channel
func main() {
ch := make(chan int)
go func() {
ch <- compute()
}()
result := <-ch
}
Java:虚拟线程(Java 21+)
public static void main(String[] args) {
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
Future<Integer> future = executor.submit(() -> compute());
int result = future.get();
}
}
Python:asyncio
import asyncio
async def main():
result = await asyncio.to_thread(compute)
return result
asyncio.run(main())
Rust:async/await
#[tokio::main]
async fn main() {
let result = tokio::spawn(async { compute().await }).await.unwrap();
}
Node.js:Promise
const result = await new Promise((resolve) => {
resolve(compute());
});
4.3 并发安全机制
| 语言 |
数据竞争防护 |
锁机制 |
原子操作 |
| Go |
race detector |
sync.Mutex |
sync/atomic |
| Java |
内存模型保证 |
synchronized/Lock |
java.util.concurrent.atomic |
| Python |
GIL(全局解释器锁) |
threading.Lock |
multiprocessing |
| Rust |
所有权系统(编译期) |
Mutex<T> |
AtomicXxx |
| C++ |
无内置防护 |
std::mutex |
std::atomic |
| Node.js |
单线程(天然安全) |
Worker Threads |
N/A |
5. 生态系统与工具链
5.1 标准库丰富度
| 语言 |
标准库覆盖 |
特色 |
| Go |
⭐⭐⭐⭐ |
HTTP、JSON、加密、测试、并发 |
| Java |
⭐⭐⭐⭐⭐ |
最完整的标准库(庞大) |
| Python |
⭐⭐⭐⭐ |
丰富的内置模块 |
| Rust |
⭐⭐⭐ |
精简但强大 |
| C++ |
⭐⭐⭐ |
STL + Boost |
| Node.js |
⭐⭐ |
依赖 npm 生态 |
5.2 包管理生态
| 语言 |
包管理器 |
仓库 |
依赖数量 |
| Go |
Go Modules |
pkg.go.dev |
300万+ |
| Java |
Maven/Gradle |
Maven Central |
50万+ |
| Python |
pip |
PyPI |
50万+ |
| Rust |
Cargo |
crates.io |
15万+ |
| C++ |
Conan/vcpkg |
各种 |
分散 |
| Node.js |
npm/yarn |
npmjs.com |
200万+ |
| Kotlin |
Gradle |
Maven Central |
同 Java |
5.3 工具链对比
| 工具类型 |
Go |
Java |
Python |
Rust |
| 代码格式化 |
gofmt(内置) |
无官方 |
black |
rustfmt |
| 静态分析 |
go vet |
SpotBugs |
Pylint |
clippy |
| 测试框架 |
go test(内置) |
JUnit |
pytest |
cargo test |
| 包管理 |
go get(内置) |
Maven/Gradle |
pip |
cargo |
| 文档生成 |
go doc(内置) |
Javadoc |
Sphinx |
cargo doc |
| 依赖注入 |
无(手动) |
Spring |
无 |
无(手动) |
5.4 IDE 支持
| IDE |
Go |
Java |
Python |
Rust |
Node.js |
| VS Code |
✅ 优秀 |
✅ 优秀 |
✅ 优秀 |
✅ 良好 |
✅ 优秀 |
| GoLand |
✅ 专属 |
--- |
--- |
--- |
--- |
| IntelliJ |
✅ 插件 |
✅ 最佳 |
✅ 插件 |
✅ 插件 |
✅ 插件 |
| PyCharm |
--- |
--- |
✅ 专属 |
--- |
--- |
| CLion |
--- |
--- |
--- |
✅ 插件 |
--- |
6. 应用场景适配性
6.1 场景适配评分
| 应用场景 |
Go |
Java |
Python |
Rust |
C++ |
Node.js |
| Web API / 微服务 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐ |
⭐⭐⭐⭐ |
| 云原生/基础设施 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐ |
| CLI 工具 |
⭐⭐⭐⭐⭐ |
⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐ |
| 数据科学/AI/ML |
⭐ |
⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐ |
⭐⭐ |
| 游戏开发 |
⭐⭐ |
⭐⭐ |
⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐ |
| 移动端开发 |
⭐ |
⭐⭐⭐ (Android) |
⭐ |
⭐⭐ |
⭐⭐ |
⭐⭐ |
| 嵌入式/IoT |
⭐⭐ |
⭐ |
⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐ |
| 区块链 |
⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐ |
| 网络爬虫 |
⭐⭐⭐ |
⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐ |
⭐⭐⭐ |
| 实时通信/WebSocket |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
| DevOps 工具 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐ |
⭐⭐ |
| 企业级后台系统 |
⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐⭐ |
| 高频交易 |
⭐⭐⭐ |
⭐⭐⭐ |
⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐ |
| 操作系统/驱动 |
⭐ |
⭐ |
⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐ |
6.2 典型应用案例
| 语言 |
知名项目/产品 |
| Go |
Docker, Kubernetes, Prometheus, etcd, Terraform, CockroachDB, Hugo |
| Java |
Spring, Hadoop, Elasticsearch, Kafka, Android |
| Python |
TensorFlow, PyTorch, Django, Flask, Ansible, OpenStack |
| Rust |
Firefox, Android (部分), 1Password, Discord (性能模块) |
| C++ |
MySQL, Redis, Chromium, Unreal Engine, Qt |
| Node.js |
Netflix, PayPal, LinkedIn (实时功能), VS Code |
7. 学习曲线与开发效率
7.1 学习曲线评估
| 语言 |
入门难度 |
精通难度 |
文档质量 |
社区活跃度 |
| Go |
⭐ 简单 |
⭐⭐⭐ 中等 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
| Java |
⭐⭐⭐ 中等 |
⭐⭐⭐⭐ 较难 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
| Python |
⭐ 最简单 |
⭐⭐ 简单 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
| Rust |
⭐⭐⭐⭐ 较难 |
⭐⭐⭐⭐⭐ 很难 |
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
| C++ |
⭐⭐⭐⭐ 较难 |
⭐⭐⭐⭐⭐ 很难 |
⭐⭐⭐ |
⭐⭐⭐ |
| Node.js |
⭐⭐ 简单 |
⭐⭐⭐ 中等 |
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
7.2 开发效率对比
| 维度 |
Go |
Java |
Python |
Rust |
| 原型开发速度 |
⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐ |
| 大型项目维护 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐ |
⭐⭐⭐⭐ |
| 重构安全性 |
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐ |
⭐⭐⭐⭐⭐ |
| 团队协作 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐⭐⭐ |
| 代码可读性 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐ |
7.3 转型成本评估
| 原语言 → Go |
适应周期 |
主要挑战 |
| Java → Go |
2-4 周 |
无 OOP、错误处理、无异常 |
| Python → Go |
2-3 周 |
静态类型、编译步骤 |
| C/C++ → Go |
1-2 周 |
GC、无指针运算 |
| Node.js → Go |
2-4 周 |
静态类型、并发模型差异 |
| Rust → Go |
1-2 周 |
GC、无所有权系统 |
8. 企业采用情况
8.1 行业采用率
| 行业 |
Go |
Java |
Python |
Rust |
| 互联网/科技 |
⭐⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐ |
| 金融 |
⭐⭐⭐ |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐ |
| 云服务 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐ |
⭐⭐⭐ |
| 游戏 |
⭐ |
⭐⭐ |
⭐⭐ |
⭐⭐⭐ |
| 医疗 |
⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐ |
| 自动驾驶 |
⭐ |
⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
8.2 薪资水平(参考)
| 语言 |
初级(年薪) |
中级(年薪) |
高级(年薪) |
| Go |
15-25万 |
25-45万 |
45-80万+ |
| Java |
12-22万 |
22-40万 |
40-70万+ |
| Python |
12-20万 |
20-38万 |
38-65万+ |
| Rust |
18-28万 |
28-50万 |
50-90万+ |
| C++ |
15-25万 |
25-45万 |
45-80万+ |
| Node.js |
12-20万 |
20-38万 |
38-65万+ |
注:薪资数据因地区、行业、公司规模差异较大,仅供参考。
8.3 招聘市场需求
2024-2025 中国开发者招聘需求趋势(相对值)
Java: ████████████████████ 100%
Python: ██████████████████ 90%
Go: ████████████████ 80%
Node.js: ██████████████ 70%
C++: ████████████ 60%
Rust: ██████ 30%
9. 技术选型决策框架
9.1 选型决策树
你的项目需求是什么?
│
┌─────────────────┼─────────────────┐
│ │ │
高性能计算 Web 服务 数据/AI
│ │ │
┌──────┴──────┐ ┌────┴────┐ ┌─────┴─────┐
│ │ │ │ │ │
系统级开发 应用级 高并发 企业级 脚本/自动化 ML/深度学习
│ │ │ │ │ │
Rust/C++ Go Go/Node Java Python Python
9.2 关键决策因素
| 决策因素 |
选 Go |
选 Java |
选 Python |
选 Rust |
| 团队规模 |
5-50人 |
20-500人 |
1-20人 |
3-20人 |
| 项目周期 |
3-12月 |
6-24月 |
1-6月 |
6-18月 |
| 性能要求 |
高 |
高 |
低-中 |
极高 |
| 并发需求 |
极高 |
高 |
低 |
极高 |
| 内存限制 |
有限 |
宽裕 |
宽裕 |
极度有限 |
| 安全要求 |
高 |
高 |
中 |
极高 |
| 招聘难度 |
中 |
低 |
低 |
高 |
| 生态成熟度 |
高 |
极高 |
高 |
中 |
9.3 场景推荐
选择 Go 的场景
- ✅ 微服务架构
- ✅ 云原生应用(Kubernetes 生态)
- ✅ 高并发 API 网关
- ✅ 命令行工具
- ✅ 分布式系统
- ✅ DevOps 工具链
- ✅ 网络代理/中间件
选择 Java 的场景
- ✅ 大型企业级应用
- ✅ 复杂业务逻辑系统
- ✅ 需要成熟生态支持
- ✅ 团队 Java 经验丰富
- ✅ Android 应用开发
- ✅ 大数据处理(Hadoop 生态)
选择 Python 的场景
- ✅ 数据科学 / AI / 机器学习
- ✅ 快速原型开发
- ✅ 自动化脚本
- ✅ 网络爬虫
- ✅ 教育和研究
- ✅ Web 后端(Django/Flask)
选择 Rust 的场景
- ✅ 系统级编程
- ✅ 性能关键型应用
- ✅ 嵌入式 / IoT
- ✅ 安全关键型系统
- ✅ 高频交易
- ✅ 游戏引擎 / 图形处理
选择 Node.js 的场景
- ✅ 实时应用(聊天、协作)
- ✅ 全栈 JavaScript
- ✅ 轻量级 API
- ✅ 事件驱动应用
- ✅ 快速 MVP 开发
9.4 多语言协作策略
现代企业项目常常采用多语言协作:
┌─────────────────────────────────────────────┐
│ API Gateway (Go) │
├───────────┬───────────┬─────────────────────┤
│ │ │ │
│ 微服务A │ 微服务B │ 微服务C │
│ (Go) │ (Java) │ (Python) │
│ │ │ ML Pipeline │
│ 用户服务 │ 订单服务 │ │
│ │ │ 数据分析服务 │
├───────────┴───────────┴─────────────────────┤
│ 数据库 / 消息队列 │
└─────────────────────────────────────────────┘
10. 总结与建议
10.1 各语言综合评分
| 维度 |
Go |
Java |
Python |
Rust |
C++ |
Node.js |
| 性能 |
8/10 |
7/10 |
4/10 |
10/10 |
10/10 |
6/10 |
| 开发效率 |
8/10 |
7/10 |
9/10 |
5/10 |
4/10 |
8/10 |
| 生态系统 |
7/10 |
10/10 |
9/10 |
6/10 |
8/10 |
8/10 |
| 学习曲线 |
9/10 |
6/10 |
10/10 |
4/10 |
4/10 |
8/10 |
| 并发能力 |
9/10 |
8/10 |
4/10 |
9/10 |
6/10 |
7/10 |
| 企业支持 |
8/10 |
10/10 |
8/10 |
7/10 |
9/10 |
7/10 |
| 未来趋势 |
8/10 |
7/10 |
9/10 |
9/10 |
5/10 |
7/10 |
10.2 Go 的核心优势
- 极致简洁:25 个关键字,学习曲线平缓
- 原生并发:goroutine + channel,轻松处理百万级并发
- 快速编译:大型项目秒级编译
- 部署简单:静态二进制,无依赖
- 云原生生态:Kubernetes、Docker、Prometheus 等基石
- 工程化:内置工具链,统一代码风格
10.3 Go 的局限性
- 泛型起步较晚(Go 1.18+),生态适配中
- 错误处理冗长 (
if err != nil 模式)
- GUI/移动端支持弱
- 科学计算/AI 生态不如 Python
- 没有枚举类型 (需用
iota 模拟)
- 反射性能开销大
10.4 最终建议
| 你的情况 |
推荐语言 |
| 初学者第一门语言 |
Go 或 Python |
| 后端开发者转型 |
Go(高并发方向) |
| 追求极致性能 |
Rust 或 C++ |
| 数据/AI 方向 |
Python |
| 企业级系统 |
Java |
| 全栈开发 |
Node.js + Go |
| 云原生/DevOps |
Go(必学) |
附录 A:Go 与其他语言快速语法对照
变量声明
// Go
name := "张三"
age := 25
var score float64 = 99.5
// Java
String name = "张三";
int age = 25;
double score = 99.5;
# Python
name = "张三"
age = 25
score = 99.5
// Rust
let name = "张三";
let age = 25;
let score: f64 = 99.5;
函数定义
// Go
func add(a, b int) int {
return a + b
}
// 多返回值
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
// Java
public int add(int a, int b) {
return a + b;
}
// 异常处理
public double divide(double a, double b) {
if (b == 0) {
throw new ArithmeticException("division by zero");
}
return a / b;
}
# Python
def add(a, b):
return a + b
def divide(a, b):
if b == 0:
raise ValueError("division by zero")
return a / b
// Rust
fn add(a: i32, b: i32) -> i32 {
a + b
}
// Result 类型
fn divide(a: f64, b: f64) -> Result<f64, String> {
if b == 0.0 {
Err("division by zero".to_string())
} else {
Ok(a / b)
}
}
并发执行
// Go
go func() {
fmt.Println("异步执行")
}()
// Java
new Thread(() -> {
System.out.println("异步执行");
}).start();
# Python
import threading
def task():
print("异步执行")
thread = threading.Thread(target=task)
thread.start()
// Rust
tokio::spawn(async {
println!("异步执行");
});
附录 B:推荐阅读