博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang常用手册:运算符、条件语句、循环语句
阅读量:6074 次
发布时间:2019-06-20

本文共 2491 字,大约阅读时间需要 8 分钟。

其实和很多语言都是类似的,go语言也是有运算符、条件语句和循环语句。

运算符(这一点和c相同)

Go 语言内置的运算符:

  • 算术运算符
    • +、-、*、/、%、++、--
  • 关系运算符
    • ==、!=、>、<、>=、<=、
  • 逻辑运算符
    • &&、||、!
  • 位运算符
    • &、|、^
  • 赋值运算符
    • =、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、!=
  • 其他运算符
    • &(取地址)、*(指针取值)

当然,运算符也是有优先级的。

条件语句

正如其他语言,go中也存在一下条件语句:

  • if
  • if ··· else
  • if ··· else if ··· else
  • if (if ··· [(else if)、(if)])
  • switch () { case value1: ··· [fallthrough] ··· }
  • select

注意,在这里我们除了常规的if语句操作相同以外,其他都是类似。

switch注意点如下:

  • 左花括号{必须与switch处于同一行
  • 条件表达式不限制为常量或者整数
  • 单个case中,可以出现多个结果选项
  • 与C语言等规则相反,Go语言不需要用break来明确退出一个case
  • 只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case
  • 可以不设定switch之后的条件表达式,在此种情况下,整个switch结构与多个if...else...的逻辑作用等同

select注意点如下:

  • elect 的代码形式和 switch 非常相似
  • 每个case都必须是一个通信
  • 所有channel表达式都会被求值
  • 所有被发送的表达式都会被求值
  • 如果任意某个通信可以进行,它就执行;其他被忽略。否则如下:
  • 如果有多个case都可以运行,Select会随机公平地选出一个执行。
    • 如果有default子句,则执行该语句。
    • 如果没有default字句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值。

选择语句

  • 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语句需要配合标签一起使用

转载地址:http://tdigx.baihongyu.com/

你可能感兴趣的文章
### 继承 ###
查看>>
数组扩展方法之求和
查看>>
astah-professional-7_2_0安装
查看>>
函数是对象-有属性有方法
查看>>
uva 10107 - What is the Median?
查看>>
Linux下基本栈溢出攻击【转】
查看>>
c# 连等算式都在做什么
查看>>
使用c:forEach 控制5个换行
查看>>
java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试...
查看>>
根据调试工具看Vue源码之组件通信(一)
查看>>
Thrift RPC 系列教程(5)—— 接口设计篇:struct & enum设计
查看>>
斯坦福-随机图模型-week1.5
查看>>
灵活的运用Model类
查看>>
hadoop 之分布式安装
查看>>
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>
Android反编译(一) 之反编译JAVA源码
查看>>
结合当前公司发展情况,技术团队情况,设计一个适合的技术团队绩效考核机制...
查看>>
python-45: opener 的使用
查看>>
cad图纸转换完成的pdf格式模糊应该如何操作?
查看>>