版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010168781/article/details/89002249
1、if-else结构
格式:
if condition1 {
// do something
} else if condition2 {
// do something else
} else {
// default
}
和C的不同,条件语句没有大括号;
新增的语法:
if initialization; condition {
// do something
}
例如:
val := 10
if val > max {
// do something
}
可以这样写:
if val := 10; val > max {
// do something
}
但要注意的是,使用简短方式 := 声明的变量的作用域只存在于 if 结构中(在 if 结构的大括号之间,如果使用 if-else 结构则在 else 代码块中变量也会存在)。
如果变量在 if 结构之前就已经存在,那么在 if 结构中,该变量原来的值会被隐藏。
2、多个返回值
例子:
定义:
func Open(name string) (*File, error) {
return OpenFile(name, O_RDONLY, 0)
}
使用:
file, err := os.Open("config.json")
if err != nil {
fmt.Sprintln("Cannot open config file")
}
3、switch 结构
第一种格式:
switch var1 {
case val1:
...
case val2:
...
default:
...
}
与C语言对比:
*变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。
类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。
*前花括号必须和 switch 关键字在同一行。
*同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。
*不使用break退出,可以使用return整个函数返回;
*如果不想退出,继续执行下一个case使用关键字:fallthrough
第二种格式:可以省略switch后的varl,这时每个case的类型其实是bool类型,根据case后表达式的真假来判断,类似于if-else
switch {
case condition1:
...
case condition2:
...
default:
...
}
第三种格式:包含一个初始化语句:
switch initialization {
case val1:
...
case val2:
...
default:
...
}
4、for 结构:循环结构,Go语言只有for
第一种格式:
for 初始化语句; 条件语句; 修饰语句 {}
与C语言对比:
* 不需要()
* 左花括号必须和for在同一行
* 循环中同时使用多个计数器:for i, j := 0, N; i < j; i, j = i+1, j-1 {}
第二种格式:
for 条件语句 {} ;类似于while循环
第三种格式:无线循环
for {}
第四种格式:for-range 迭代结构
for index, value := range array { }
它可以迭代任何一个集合(包括数组和 map)
5、break 与 continue
break 语句退出循环
continue 忽略剩余的循环体,准备进入下一次循环,只能被用于 for 循环中
6、标签与 goto
标签:某一行中第一个以冒号(:)结尾的单词,大小写敏感
break、continue后面都可以跟个标签;
goto和标签:标签在goto后面(正序),标签和 goto 语句之间不能出现定义新变量的语句,否则会导致编译失败。