Go 语言控制流基础:for 与 switch
在 Go 语言中,for 是唯一提供的循环结构,而 switch 则提供了灵活的分支判断能力。这两者结合使用时,往往能写出非常简洁的代码。下面我们通过实际案例来拆解它们的用法。
for 循环与 range
Go 的 for 循环功能强大,配合 range 关键字可以方便地遍历切片或字符串。
list := []string{"h","e","l","l","o"}
for k,v := range list{
fmt.Printf("%d %c\n",k,v)
}
这里 k 代表索引,v 代表元素值。值得注意的是,当遍历字符串时,range 返回的是 UTF-8 编码的 rune(即 Unicode 码点),而不是单个字节。这意味着在处理中文等多字节字符时,它能正确处理字符边界。
switch 语句的灵活性
Go 的 switch 不需要显式的 break,且支持无条件的表达式判断,这让它非常适合用来替代复杂的 if-else 链。
看下面的字节数组比较函数,它利用 switch{} 实现了类似字典序的比较逻辑:
func Compare(a,b []byte) int{
for i := 0;i < len(a) && i < len(b);i++{
switch{
case a[i] > b[i]:
return 1;
case a[i] < b[i]:
return -1;
}
}
switch{
case len(a) < len(b):
return -1;
case len(a) > len(b):
return ;
}
}

