今天晚上有考试,所以就提前总结了!(这其实是下午3点写的话
)
Task04的任务是了解Go语言中的运算符和控制语句,有编程基础的同学对运算符再熟悉不过了,我们就简单介绍一下吧。
运算符
Go支持普通的数字运算符,下面的表格列出了当前支持的运算符,以及其优先级。它们全部是从左到右结合的。
汇总一下Go语言内置的运算符:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 其他运算符 详情请自行搜索学习,这里不做赘述。 控制结构
在Go中只有很少的几个控制结构d。例如这里没有do或者while循环,只有for。有(灵活的)switch语句和if,而switch接受像for那样可选的初始化语句。还有叫做类型选择和多路通讯转接器的select(后面再叙述)。语法有所不同(同C相比):无需圆括号,而语句体必须总是包含在大括号内
//if-eles
//在Go中if看起来是这样的:
if x > 0 { //这里"{" 不能移到下面.必须和if在同一行
return y
} else {
return x
}
强制大括号鼓励将简单的if语句写在多行上。无论如何,这都是一个很好的形式,尤其是语句体中含有控制语句,例如return或者break。if和switch接受初始化语句,通常用于设置一个(局部)变量。
if err := Chmod(0664); err!= nil { //nil与C的 NULL类似
fmt.Printf(err) // err的作用域被限定在if内
return err
}
goto
Go有goto语句——明智的使用它。用goto跳转到一定是当前函数内定义的标签。例如假设这样一个循环:
func myfunc(){
i := 0
Here: <--这行的第一个词,以分号结束作为标签
println(i)
i++
goto Here <--跳转
}
注意:标签名是大小写敏感的。
for控制结构
Go的for循环有三种形式,只有其中的一种使用分号。
for init; condition; post { } //和C的for一样
for condition { } //和while一样
for { } //死循环
最后,由于Go没有逗号表达式,而++和–是语句而不是表达式,如果你想在for中执行多个变量,应当使用平行赋值。
// Reverse a
for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 {
a[i], a[j] = a[j], a[i] //平行赋值
}
break和continue
利用break可以提前退出循环,break终止当前的循环。
for i := 0; i < 10; i++ {
if i > 5{
break //终止这个循环,只打印0到5
}
println(i)
}
循环嵌套循环时,可以在break后指定标签。用标签决定哪个循环被终止:
J: for j := 0; j < 5; j++ {
for i := 0; i < 10; i++ {
if i > 5 {
break J //现在终止的是j循环,而不是i的那个
}
println(i)
}
}
利用continue让循环进入下一个迭代,而略过剩下的所有代码。下面循环打印了0到5。
for i := 0; i < 10; i++ {
if i > 5{
continue //跳过循环中所有的代码println(i)
}
range
关键字range可用于循环。它可以在slice、array、string、map和channel(参阅第6章)。range是个迭代器,当被调用的时候,从它循环的内容中返回一个键值对。基于不同的内容,range返回不同的东西。当对slice或者array做循环时range返回序号作为键,这个序号对应的内容作为值。考虑这个代码:
list := []string {"a", "b", "c", "d", "e", "f"} //0
for k, v := range list{ //1
//对k和v做想做的事情 // 2
}
// 0:创建一个字符串的slice
//1:用range对其进行循环。每一个迭代,range将返回int类型的序号,string类型的值,以0和“a”开始。
// 2:k的值为0...5,而v在循环从“a”...“f”。
未完待续
明天有课设答辩,要准备好多材料,暂且就总结到这里!溜啦