其实和不少语言都是相似的,go语言也是有运算符、条件语句和循环语句。数组
运算符(这一点和c相同)post
Go 语言内置的运算符:ui
- 算术运算符
- +、-、*、/、%、++、--
- 关系运算符
- ==、!=、>、<、>=、<=、
- 逻辑运算符
- &&、||、!
- 位运算符
- &、|、^
- 赋值运算符
- =、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、!=
- 其余运算符
- &(取地址)、*(指针取值)
固然,运算符也是有优先级的。spa
条件语句指针
正如其余语言,go中也存在一下条件语句:code
- if
- if ··· else
- if ··· else if ··· else
- if (if ··· [(else if)、(if)])
- switch () { case value1: ··· [fallthrough] ··· }
- select
注意,在这里咱们除了常规的if语句操做相同之外,其余都是相似。字符串
switch注意点以下:string
- 左花括号{必须与switch处于同一行
- 条件表达式不限制为常量或者整数
- 单个case中,能够出现多个结果选项
- 与C语言等规则相反,Go语言不须要用break来明确退出一个case
- 只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case
- 能够不设定switch以后的条件表达式,在此种状况下,整个switch结构与多个if...else...的逻辑做用等同
select注意点以下:it
- elect 的代码形式和 switch 很是类似
- 每一个case都必须是一个通讯
- 全部channel表达式都会被求值
- 全部被发送的表达式都会被求值
- 若是任意某个通讯能够进行,它就执行;其余被忽略。不然以下:
- 若是有多个case均可以运行,Select会随机公平地选出一个执行。
- 若是有default子句,则执行该语句。
- 若是没有default字句,select将阻塞,直到某个通讯能够运行;Go不会从新对channel或值进行求值。
选择语句io
- for init; condition; post { } (和 C 语言的 通常for 同样)
- for condition { } (和 C 的 while 同样)
- for { } ==> (跟C语言for(;;){} 相同)
- init: 通常为赋值表达式,给控制变量赋初值;
- condition: 关系表达式或逻辑表达式,循环控制条件;
- post: 通常为赋值表达式,给控制变量增量或减量。
- for 循环的 range 格式能够对 slice、map、数组、字符串等进行迭代循环。
- for key, value := range oldMap { newMap[key] = value }
注意,for循环条件控制器是无需括号的,循环体须要花括号包裹,循环变量、循环调教、循环变量变化量之间用 ; 分割。
demo以下:
package main //导包 import ( "fmt" ) func main() { numbers := [6]int{1, 2, 3, 5} for i := range numbers { fmt.Printf("第 %d 位 x 的值 = %d\n", i, numbers[i]) } fmt.Println("====我是分割线====") for i, x := range numbers { fmt.Printf("第 %d 位 x 的值 = %d\n", i, x) } fmt.Println("====我是分割线====") for a := 0; a < len(numbers); a++ { fmt.Printf("第 %d 位 x 的值 = %d\n", a, numbers[a]) } } 复制代码
固然咱们可以小小的推测一下结果,这里直接贴出结果以下:
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
====我是分割线====
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
====我是分割线====
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
复制代码
固然,咱们说到循环,不得不提一下循环控制语句,以下:
- break
- continue
- goto
值得一提的是,break和continue都和其余语言中的用法相似。可是个别一些语言中不存在goto或者不多使用。goto示例以下:
/* 定义局部变量 */ var a int = 10 /* 循环 */ LOOP: for a < 20 { if a == 15 { /* 跳过迭代 */ a = a + 1 goto LOOP } fmt.Printf("a的值为 : %d\n", a) a++ } 复制代码
运行结果以下:
a的值为 : 10
a的值为 : 11
a的值为 : 12
a的值为 : 13
a的值为 : 14
a的值为 : 16
a的值为 : 17
a的值为 : 18
a的值为 : 19
复制代码
咱们简易的看一下goto语法:label: statement; ··· goto label
也就是说咱们给某处语句打上 label 标签,使用goto则会跳转到该语句。
总结:
- 运算符和其余语言同样没什么区别
- 条件语句中多出一个值得注意的select语句,且主要用于io操做中
- 循环语句也和其余语言相似,须要注意的是goto语句须要配合标签一块儿使用