sponsored links

【Go】Go基础(四):流程控制(控制结构)

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 语句之间不能出现定义新变量的语句,否则会导致编译失败。

Tags: