四、运算符
1.算数运算符
+、-、*
/:值为商
%:取余
++、--
2.关系运算符
==、!=、>、<、>=、<=
3.逻辑运算符
&&、||、!
4.位运算符
&、|、^、<<、>>
5.赋值运算符
=、+=、-+、*=、/=、%=、<<=、>>=、&=、|=、^=
6.其他运算符
&:取地址运算符
*:指针运算符
:= 省略定义运算符
##注意
1.指针变量 * 和地址值 & 的区别:指针变量保存的是一个地址值,会分配独立的内存来存储一个整型数字。当变量前面有 * 标识时,才等同于 & 的用法,否则会直接输出一个整型数字。
2.Go 的自增,自减只能作为表达式使用,而不能用于赋值语句。
五、条件语句
1.if语句
if 条件 { //条件无须括号扩起
处理代码
}
2.if……else
if 条件 { //条件无须括号扩起
处理代码1
}
else{
处理代码2
}
3.if语句嵌套
4.switch语句
switch var {
case value1:
处理代码1
case value2:
处理代码2
case value3,value4,value5:
处理代码3
……
default:
处理代码N
}
(1)Type Switch
switch x.(type){
case type:
statement(s);
case type:
statement(s);
/* 你可以定义任意个数的case */
default: /* 可选 */
statement(s);
}
(2)fallthrough
使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true。
5.select语句:select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。
select {
case communication clause :
statement(s);
case communication clause :
statement(s);
/* 你可以定义任意数量的 case */
default : /* 可选 */
statement(s);
}
以下描述了 select 语句的语法:
每个 case 都必须是一个通信
所有 channel 表达式都会被求值
所有被发送的表达式都会被求值
如果任意某个通信可以进行,它就执行,其他被忽略。
如果有多个 case 都可以运行,Select 会随机公平地选出一个执行。其他不会执行。
否则:
如果有 default 子句,则执行该语句。
如果没有 default 子句,select 将阻塞,直到某个通信可以运行;Go 不会重新对 channel 或值进行求值。
六、循环语句
1.for循环
1)基础的结构
for init; condition; post { }
2)仅有条件结构
for condition { }
3)死循环结构
for { }
4)for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:
for key, value := range oldMap {
newMap[key] = value
}
3.break语句:经常用于中断当前 for 循环或跳出 switch 语句
4.continue语句
5.goto语句:可以无条件地转移到过程中指定的行。
goto 语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。
格式:
goto label;
..
.
label: statement;
七、函数
1.函数的格式
func function_name( [parameter list] ) [return_types] {
函数体
}
示例:
/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
/* 声明局部变量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
2.函数调用:函数之间可以相互调用,执行相应代码块内容
3.多个返回值
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Google", "Runoob")
fmt.Println(a, b)
}
4.闭包:Go 语言支持匿名函数,可作为闭包。匿名函数是一个"内联"语句或表达式。
示例代码:
(1)for循环
package main
import "fmt"
func main() {
sum := 0
for i := 0; i <= 10; i++ {
sum += i
}
fmt.Println(sum)
fmt.Println("--------------")
i := 2
for i>0{
fmt.Print(i)
i--;
}
fmt.Println("*************")
j := 1;
for {
fmt.Print(j)
j++;
if j>2 {
break;
}
}
}
(2)函数
package main
import "fmt"
func getSequence() func() int {
i:=0
return func() int {
i+=1
return i
}
}
func main(){
/* nextNumber 为一个函数,函数 i 为 0 */
nextNumber := getSequence()
/* 调用 nextNumber 函数,i 变量自增 1 并返回 */
fmt.Println(nextNumber())
fmt.Println(nextNumber())
fmt.Println(nextNumber())
/* 创建新的函数 nextNumber1,并查看结果 */
nextNumber1 := getSequence()
fmt.Println(nextNumber1())
fmt.Println(nextNumber1())
}