前言

经常有朋友问新项目该用什么语言。没有「最好的语言」,只有合不合适,同一个业务用不同栈做,成本差出几倍很正常。这篇把五种常见技术栈放一起,说说各自擅长什么、不擅长什么、什么场景该用它,最后给几个组合搭配的建议。

1、Go:云原生和高并发服务

擅长:微服务/API 网关、中间件(消息队列、注册中心)、CLI 工具、DevOps 基建(Docker/K8s 本身就是 Go 写的)、高并发 IO 密集服务。

看重它的三点:

  • 并发模型:goroutine + channel,协程级并发写起来成本极低,单机扛十万级并发连接不费劲
  • 部署简单:静态编译成一个二进制文件,扔到服务器就能跑,容器镜像可以做到几 MB,做云原生这块比别的语言省心太多
  • 性能:编译型语言,接近 C 的效率(带 GC),启动毫秒级、内存占用低
1
2
3
4
5
6
7
// 一个能扛并发的 HTTP 服务,全部代码就这么多
func main() {
    http.HandleFunc("/api/ping", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte(`{"pong":true}`))
    })
    http.ListenAndServe(":8080", nil)   // 每请求一个 goroutine,不用手工管线程池
}

短板:泛型 1.18 才有,生态还在补;业务开发的表达效率不如 Java/Python,缺成熟 ORM 和全家桶;错误处理 if err 写得人手酸。写重业务的 CRUD 系统会觉得啰嗦,需要复杂事务管理的传统企业应用也别硬上。

2、Python:数据、AI 和自动化

擅长:AI/机器学习(PyTorch 全生态)、数据分析(pandas)、爬虫、运维脚本、快速原型。

看重它的两点:

  • 开发快:动态类型加交互式解释器,验证一个想法最快的就是它;AI 领域的生态没有对手
  • 胶水能力:性能敏感的部分有 C 扩展顶着(numpy/pandas 底层都是 C),业务层保持简洁

短板:GIL 限制 CPU 密集并发(多进程和 asyncio 是补丁不是解药);运行速度慢,比 Java/Go 慢一个量级;部署依赖管理是老大难,虚拟环境和 poetry 是必修课。高并发在线服务、几百人维护的百万行大工程,别用。

1
2
3
4
# 数据处理三行完事:读 CSV → 聚合 → 出图
import pandas as pd
df = pd.read_csv("orders.csv").groupby("city")["amount"].sum()
df.sort_values().plot(kind="barh")

3、Node + Vue:全栈一体和中后台

擅长:中后台管理系统、SSR 官网/电商前台、实时应用(WebSocket 聊天/协作)、BFF 聚合层。

看重它的两点:

  • 前后端一种语言:前端 Vue3(Composition API + Vite 热更快),后端 Node(NestJS/Express),一个人就能闭环
  • npm 生态:包数量第一,常见需求基本都有现成轮子;Vite 的开发体验也是同代最好的

短板:CPU 密集计算弱(单线程事件循环,转码、科学计算会堵死事件循环);Node 后端在事务复杂、强一致的企业核心场景不如 Java 成熟。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<!-- Vue3 组合式 API:带搜索防抖的列表,组件即全部 -->
<script setup>
import { ref, watch } from 'vue'
const kw = ref(''), list = ref([])
let t
watch(kw, v => { clearTimeout(t); t = setTimeout(() =>
  fetch(`/api/users?kw=${v}`).then(r => r.json()).then(d => list.value = d), 300) })
</script>
<template>
  <input v-model="kw" placeholder="搜索" />
  <li v-for="u in list" :key="u.id">{{ u.name }}</li>
</template>

4、UniApp:一套代码打多端

擅长:小程序矩阵(微信/支付宝/抖音)+ H5 + App 的 C 端业务;预算有限、人手少、又要全端覆盖的产品。

看重它的两点:

  • 一套代码编译 8 个端,语法就是 Vue,业务逻辑写一遍
  • 条件编译处理平台差异,#ifdef MP-WEIXIN 隔离微信专属 API;uni-ui/uView 组件库成熟

短板:性能不如原生(复杂动画、超长列表吃力);平台特有能力要写桥接;各端兼容细节是持续成本,微信基础库一升级经常有新坑。只做一个端的项目别用它,直接原生或者 Flutter 更好。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<!-- 条件编译示例:同一个方法,各端各走各的 -->
<script>
export default {
  methods: {
    pay() {
      // #ifdef MP-WEIXIN
      wx.requestPayment({ /* 微信支付 */ })
      // #endif
      // #ifdef H5
      location.href = '/pay/h5'
      // #endif
    }
  }
}
</script>

5、Java:企业级和大型系统

擅长:企业核心系统(交易/账务/ERP)、高并发在线服务、大团队长期维护的复杂业务。

看重它的三点:

  • 生态深度:Spring 全家桶、中间件客户端、监控链路追踪,二十多年企业级积累没有替代者;招人好招、资料最多
  • JVM 性能:G1/ZGC 让大堆服务停顿可控,JIT 之后热点性能稳定;JDK 21 的虚拟线程把高并发 IO 这块短板也补上了
  • 工程化:强类型加成熟工具链(重构、静态检查、调试),百万行代码库长期维护靠这个

短板:启动慢、内存占用高(Native Image 和 CRaC 在补);小项目小团队用着嫌重;开发效率比脚本语言低(Lombok 和 Record 好了一些)。

1
2
3
4
5
6
7
8
9
// Spring Boot 3 + 虚拟线程:一个接口的全部
@RestController
public class OrderController {
    @GetMapping("/orders/{id}")
    public Order detail(@PathVariable Long id) {
        return orderService.detail(id);   // 阻塞 IO 由虚拟线程扛,不用 WebFlux
    }
}
// application.yml: spring.threads.virtual.enabled=true

6、组合搭配建议

业务形态 推荐组合 理由
电商/交易类中大型系统 Java 后端 + Vue3 中后台 + UniApp C 端小程序 交易核心要 Java 的生态和稳;中后台 Vue 效率高;C 端多端覆盖 UniApp 省人力
云原生中间件/网关/工具 Go 部署简单、并发强、资源省
AI 应用/数据平台 Python 服务 + Java/Go 主业务后端 AI 部分离不开 Python 生态,业务部分交给工程化强的栈,API 对接
创业 MVP / 小团队 Node(NestJS) + Vue3 全栈(或 UniApp 打多端) 一两个前端就能全栈闭环,速度优先
传统企业内部系统 Java + Vue3 人才市场和长期维护成本的稳妥解

7、选型时我一般这么想

  1. 先看业务形态:C 端小程序矩阵 → UniApp;中后台 → Vue3;高并发交易 → Java;云基建 → Go;数据/AI → Python
  2. 再看团队会什么:既有技能的权重大于语言理论优劣,学习成本是真金白银
  3. 项目活多久:三个月验证期的用最快的栈,要维护十年的用最稳的(Java/Go)
  4. 瓶颈在哪:IO 密集(大多数业务)各栈都行;CPU 密集就把 Node 和 Python 单线程方案排除掉
  5. 部署在哪:容器化/K8s 优先考虑 Go 的单二进制和 Java 的容器感知;Serverless 优先冷启动快的(Go/Node)

总结

选型就是把业务形态、团队技能、生命周期三个约束求交集:Java 守交易核心、Go 打并发基建、Python 攻数据和 AI、Node+Vue 撑中后台和全栈、UniApp 一套打多端。最贵的错误不是选错语言,而是指望一种语言包打天下。