Skip to content

常用编程语言基础语法对比 ​

编译与运行 ​

语言编译与运行
Javajavac Hello.java & java Hello.class
java Hello.java (Java 11+)
Golanggo run hello.go
go build -o hello hello.go & ./hello
Pythonpython hello.py
JSnode hello.js
TStsx hello.ts
tsx watch hello.ts
tsc & node hello.js
node hello.ts

包管理器 ​

语言包管理器元数据文件
JavaMaven
Gradle
pom.xml
build.gradle | build.gradle.kts
GolangGo Modulesgo.mod & go.sum
Pythonpip
uv
requirements.txt
pyproject.toml & uv.lock
JS / TSnpmpackage.json

包与模块 ​

包 ​

包存在狭义与广义两种概念:

  • 狭义上,包指的是:语言内的代码组织单元,物理上常映射为目录。后续提到包这个概念时,如果不加特殊说明,一般是指狭义包。
  • 广义上,包指的是:可分发、可安装、有版本的发布与依赖单元,物理载体通常是归档文件(jar、zip、wheel、tgz)。包管理器中的包指代的就是广义包。
语言狭义包广义包
Javapackage(目录)jar、artifact、library、dependency
Golangpackage(目录)module
Pythonpackage (目录)distribution package
JS / TS无npm package

模块 ​

在不同的编程语言中,模块的概念也有较大差异:

语言模块的含义
Java包的集合,部署与依赖单元(Java 9+)
Golang包的集合,版本化依赖管理单元
Python文件级代码单元,通常是一个源文件( .py )
JS / TS文件级代码单元,通常是一个源文件( .js / .ts )

对于 Java / Golang 来说,模块是包的集合,它们的关系是:模块 ⊃ 包(目录) ⊃ 文件。

对于 Python / JS / TS 来说,模块通常是一个源文件,它们的关系是:包(目录)⊃ 模块(文件)。这里为了便于类比理解,将包与目录等价了,但实际上 JS / TS 中不存在狭义包的概念,其与目录也并不等价。

导入与导出 ​

几乎所有编程语言都支持 import 其它包或模块中的对象,大部分编程语言不需要显性 export 对象。如下所示:

语言import 的对象export 的对象
Java类型(类、接口、枚举、注解)或静态成员普通 java 文件无 export 关键字,通过修饰词控制可见性
JPMS 可 exports 包来控制包的可见性
Golang包无 export 关键字,通过首字母大小写控制可见性
Python模块、模块中的名称、包无 export 关键字
JS / TSexport 的对象变量、函数、类等

示例:

语言importexport
Javaimport java.time.LocalDateTime-
Golangimport dt "time"-
Pythonfrom datetime import datetime as dt-
JS / TSimport { DateTime as dt } from "luxon"export class DateTime