许多 Java 开发者在学习 Go 时,最大的障碍并不是“不会写”,而是不知道该怎么“换一种方式写”。
本文将通过 最常见的基础语法对照表,协助你用 Java 思维快速理解 Go 语法,降低学习成本。
1️⃣ 变量声明
|
场景 |
Java |
Go |
|
显式类型 |
int a = 10; |
var a int = 10 |
|
类型推断 |
var a = 10; |
a := 10 |
|
常量 |
final int a = 10; |
const a = 10 |
要点
- := 是 Go 最常用写法(函数内)
- Go 不允许声明但不使用的变量(编译期直接报错)
2️⃣ 基本数据类型
|
Java |
Go |
|
int |
int |
|
long |
int64 |
|
double |
float64 |
|
boolean |
bool |
|
String |
string |
⚠️ Go 中 没有自动类型转换,必须显式转换。
3️⃣ 条件判断(if / switch)
if 判断
Java
if (a > 10) {
System.out.println("big");
}
Go
if a > 10 {
fmt.Println("big")
}
✔ Go 的 if 不需要括号
✔ 条件必须是 bool,不能写 if (a)
switch 判断
Java
switch (day) {
case 1:
break;
case 2:
break;
}
Go
switch day {
case 1:
case 2:
}
Go 的 switch 默认不需要 break,更安全。
4️⃣ 循环(for)
|
Java |
Go |
|
for |
for |
|
while |
for |
|
do-while |
for |
Java
for (int i = 0; i < 10; i++) {}
Go
for i := 0; i < 10; i++ {}
Go 只有一种循环:for
5️⃣ 方法 / 函数定义
Java
public int add(int a, int b) {
return a + b;
}
Go
func add(a int, b int) int {
return a + b
}
✔ 参数类型写在变量后
✔ 返回值类型写在参数列表后
6️⃣ 集合对照(最常用)
|
Java |
Go |
|
ArrayList |
slice |
|
HashMap |
map |
|
Set |
map[T]bool |
ArrayList → slice
Java
List<String> list = new ArrayList<>();
list.add("Java");
Go
list := []string{"Java"}
list = append(list, "Go")
HashMap → map
Java
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
Go
m := map[string]int{"A": 1}
7️⃣ 类 vs 结构体
Java
class User {
private String name;
}
Go
type User struct {
Name string
}
Go 没有 class,使用 struct + 接口
Go 通过 组合 替代继承
8️⃣ 接口(超级重大)
Java
interface Service {
void run();
}
Go
type Service interface {
Run()
}
✔ Go 接口是 隐式实现
✔ 不需要 implements
9️⃣ 异常处理
|
Java |
Go |
|
try-catch |
error 返回值 |
|
RuntimeException |
显式判断 |
Java
try {
do();
} catch (Exception e) {}
Go
if err := do(); err != nil {
return err
}
Go 强调 显式错误处理,代码更可控。
main 方法 & 程序入口
Java
public static void main(String[] args) {}
Go
func main() {}
✔ Go 程序从 main 包的 main() 函数开始
总结:Java 开发者学 Go 的关键点
✅ 语法更少,但更严格
✅ 并发更简单(goroutine + channel)
✅ 组合优于继承
✅ 错误处理更显式
Go 不是 Java 的替代品,而是 Java 能力的放大器。

