内容目录
特性 | Go | Java | 说明 |
---|---|---|---|
if |
不需要圆括号包围条件,强制使用大括号 | 条件必须包含在圆括号中,大括号可选 | Go在if 语句中不使用圆括号,Go鼓励(实际上是强制)使用大括号包围if 语句的主体,而Java则在条件周围使用圆括号,并允许省略大括号(如果只有一条语句)。 |
switch |
无需break 自动终止,可以不带表达式 |
需要break 防止穿透,始终带有表达式 |
在Go中,switch 不会自动穿透到下一个案例,除非使用了fallthrough 语句。switch 可以不带表达式,这时它会像是switch true {...} 这样工作,从而可以用作更一般的分支结构。Java中必须显示使用break 来防止穿透。 |
range /for |
range 提供对数组、切片、字符串、map或通道的迭代 |
for 是Java中实现迭代的唯一方式 |
range 在Go中是一个关键字,它简化了容器类型(例如数组和切片等)的迭代。在Java中,对于数组和Iterable 接口的实现,可以使用增强的for 循环进行迭代。 |
示例代码
if
语句
Go:
func checkPositive(num int) {
if num > 0 {
fmt.Println("Positive")
} else {
fmt.Println("Non-positive")
}
}
Java:
void checkPositive(int num) {
if (num > 0) {
System.out.println("Positive");
} else {
System.out.println("Non-positive");
}
}
switch
语句
Go:
func dayOfWeek(day int) {
switch day {
case 1:
fmt.Println("Monday")
case 2:
fmt.Println("Tuesday")
// ... 更多案例 ...
default:
fmt.Println("Invalid day")
}
}
Java:
void dayOfWeek(int day) {
switch (day) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
// ... 更多案例 ...
default:
System.out.println("Invalid day");
break;
}
}
range
/for
循环
Go (range
):
func printSlice(s []string) {
for index, value := range s {
fmt.Println(index, value)
}
}
func printMap(m map[string]int) {
for key, value := range m {
fmt.Println(key, value)
}
}
Java (for
):
void printArray(String[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(i + " " + arr[i]);
}
}
void printList(List<String> list) {
for (String item : list) {
System.out.println(item);
}
}
void printMap(Map<String, Integer> map) {
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
在Java中,集合迭代通常要依赖于Iterator
或增强的for
循环,而在Go中,可以直接使用range
进行简洁的迭代。此外,在Go中range
在遍历时还会返回索引和值(或键和值),而在Java中,需要明确地访问这些元素。