保留关键字

语言设计简练,只有 25 个保留关键字。

break default func interface select
case defer go map struct
chan else goto package switch const fallthrough if range type continue for import return var 

运算符

全部运算符、分隔符、以及其他符号。

+ & += &= && == != ( )
- | -= |= || < <= [ ]
* ^ *= ^= <- > >= { } / << /= <<= ++ = := , ; % >> %= >>= -- ! ... . : &^ &^= 

运算符结合率从左到右。

优先级   运算符
------------+---------------------------------------------+----------------------------
high    * / & << >> & &^+ - | ^== != < <= < >=<- &&
low     ||

简单位运算

0110 & 1011 = 0010 AND 都为 1。 0110 | 1011 = 1111 OR ⾄少⼀个为 1。 0110 ^ 1011 = 1101 XOR 只能⼀个为 1。 0110 &^ 1011 = 0100 AND NOT 清除标志位 a := 0 a |= 1 << 2 // 0000100: 在 bit2 设置标志位 a |= 1 << 6 // 1000100: 在 bit6 设置标志位 a = a &^ (1 << 6) // 0000100: 清除 bit6 标志位 x := 1 ^x // 取反运算 -0010 

初始化

初始化复合对象,必须使用类型标签,且左大括号必须在类型尾部。

var a = struct{x int}{100}
var b = []int{1, 2, 3} 

If

  • 可以省略条件表达式括号
  • 支持初始化语句,可以定义代码块局部变量
  • 代码块左大括号必须在条件表达式尾部
x := 0// 局部变量 n 只能在循环中使用
if n := "abc"; x > 0 { println(n[0]) } else if x < 0 { println(n[1]) } else { println(n[2]) } 

不支持三元操作符 a > b ? a : b

For

For 支持三种循环方式,Go 中没有 while 关键字语法,可以用 For 模拟。

s := "abc"// 常见 For 循环
// 计算出长度 n,避免多次调用 len 函数
for i, n := 0, len(s); i < n; i++ { println(s[i]) } // 替代 while (n > 0) {} n := len(s) for n > 0 { println(s[n]) n-- } // 替代 while (true) {} for { println(s) } 

Range

类似迭代器操作,返回 (索引, 值)或(键, 值)

Range 会复制对象,应该使用引用类型 slice、map。

for 循环的 range 格式可以对 slice 或者 map 进行迭代循环。

遍历 slice 时,返回当前的下标和该下标对应元素的一个拷贝

s := []int{1, 2, 3, 4, 5} for i, v := range s { // 复制 struct slice { pointer, len, cap } if i == 0 { s = s[:3] // 对 slice 修改,不会影响 range s[2] = 100 // 对底层数据的修改 } println(i, v) } 输出: 0 1 1 2 2 100 3 4 4 5 

Switch

分支表达式可以是任意类型,不限于常量。可以省略 break,默认自动终止。

继续下一分支,可以使用 fallthrough,但不再判断条件。

x := []int{1, 2, 3} i := 2 switch i { case x[1]: println("1") fallthrough case 1, 3: println("2") default: println("3") } 输出 1 2 

省略条件表达式,可以当 if...else if...else 使用。

switch {case x[1] > 0: // if println("1") case x[1] < 0: // else if println("2") default: // else println("3") } // 带初始化语句 switch i := x[2]; { case x[1] > 0: // if println("1") case x[1] < 0: // else if println("2") default: // else println("3") } 

Goto、Break、Continue

⽀持在函数内 goto 跳转。标签名区分⼤⼩写,未使⽤标签引发错误。

func main() {var i intfor {println(i)i++if i > 2 { goto BREAK } } BREAK: println("break") EXIT: // Error: label EXIT defined and not used } 

配合标签,breakcontinue 可在多级嵌套循环中跳出。

func main() {
L1:for x := 0; x < 3; x++ {
L2:for y := 0; y < 5; y++ {if y > 2 { continue L2 } if x > 1 { break L1 } print(x, ":", y, " ") } println() } } 输出 0:0 0:1 0:2 1:0 1:1 1:2 

break 可⽤于 for、switch、select,⽽ continue 仅能⽤于 for 循环。

作者:流年1004
链接:https://www.jianshu.com/p/21b90af6ea8f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/jhhe66/articles/9506731.html

【转】Go 语言教程(2)——表达式相关推荐

  1. x%3e=y%3e=z的c语言表达式,我的C语学习笔记-C语言教程(三).doc

    我的C语学习笔记- C语言教程(三) C语言教程---第一章: C语言概论 C语言教程---第二章: 数据类型.运算符.表达式 C语言教程---第三章: C语言程序设计初步 C语言教程---第四章: ...

  2. while保留五位小数c语言,C语言教程(共同学习)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C语言教程第三章: C语言程序设计初步 C语言程序设计 本课介绍C语言程序设计的基本方法和基本的程序语句. 从程序流程的角度来看,程序可以分为三种基本结构 ...

  3. Swift2.0语言教程之闭包

    Swift2.0语言教程之闭包 Swift2.0语言闭包 闭包是自包含的函数代码块,可以在代码中被传递和使用.Swift中的闭包与C和Objective-C中的代码块(blocks)以及其他一些编程语 ...

  4. Swift2.0语言教程之函数的返回值与函数类型

    Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有 ...

  5. python语言教程-Python语言教程手册

    Python语言教程手册 Python是什么? 解释性语言 多范式 介绍 命令后>>>python Python 2.7.3 (default, Aug 1 2012, 05:14: ...

  6. c语言语言教程0基础_C语言基础

    c语言语言教程0基础 Hey, Folks here I am back with my second article on C language. Hope you are through with ...

  7. c语言如何存储已编译内容,二级C语言教程章节测试13.编译预处理和动态存储分配...

    一.选择题 (1)有以下程序 main() { char p[]={'a', 'b', 'c'}, q[]="abc"; printf("%d %d\n", s ...

  8. int sel 在c语言表示,C语言教程ch1初识C程序.ppt

    C语言教程ch1初识C程序 C 程序结构 3层结构,5个函数 降低程序的构思.编写.调试的复杂度 可读性好 如何尽快学会用C语言进行程序设计 了解C程序的构成 模仿.改写.编写 通过不断的编程实践,逐 ...

  9. c语言单片机循环程序,单片机c语言教程:C51循环语句

    TH1 = 0xE8; //11.0592MHz 1200 波特率 TL1 = 0xE8; TI = 1; TR1 = 1; //启动定时器 for (I=1; I=10; I++) //这里能设初始 ...

  10. c语言第七章函数笔记,我的C语学习笔记-C语言教程(七).doc

    我的C语学习笔记- C语言教程(七) C语言教程---第一章: C语言概论 C语言教程---第二章: 数据类型.运算符.表达式 C语言教程---第三章: C语言程序设计初步 C语言教程---第四章: ...

最新文章

  1. 随机顺序_SSD固态硬盘的顺序读写和随机读写区别,谁更重要?
  2. 华为开源CTR Benchmark,学术界SOTAs的照妖镜?
  3. 在巴塞罗那,华为挥别昨日 | MWC 2019
  4. [Phonegap+Sencha Touch] 移动开发18 Sencha Touch项目通过phonegap打包后的程序名字的问题...
  5. postgresql存储函数实现大量模拟数据插入
  6. 【第一期】史上最全电子漫画合集,收藏了。
  7. 配置vim在源代码中自动添加作者信息
  8. 修改系统时间导致myeclipse不能自动发布的解决方法
  9. matlab分支定界法linprog_序列比对(二十二)——中间字符串分支定界方法中更紧的界...
  10. 商务部部长助理黄海:中国服务外包产业发展势头良好
  11. python实现高精度加法_蓝桥杯-Python-高精度加法
  12. Java 实例变量 和 实例方法 以及调用
  13. Exchange2010 server的部署及配置(一)
  14. “真正的”欧洲杯,鸡冻不鸡冻?
  15. 推荐一个去广告的插件: Adblock Plus,非常好用
  16. 灵境元宇宙 ---论元宇宙之本真
  17. TCP协议发送SKB时ip_summed初始值为0
  18. 简易的网页小游戏之接星星,HTML+JavaScript+css(一丢丢)
  19. 滴滴出行与Uber的合并历程回顾
  20. 解决:不能连接到MySQL服务器:“127.0.0.1“

热门文章

  1. cxf restful
  2. 40种为网页设计师准备的高品质和免费的多媒体PSD文件
  3. SQL Server 下的 获取当月最后一天
  4. 数据库跟尾过多的错误,能够的原因阐发及处置惩罚设备
  5. SIMD学习笔记整理(索引贴)
  6. 基于稀疏表示的人脸识别 (SRC,LASRC,RASL,MRR)
  7. C# 3.0下有限状态机的一种优雅的实现
  8. linux命令之awk命令
  9. 生产过剩下的危机--房价上涨买不起房,房价泡沫破裂后仍然买不起房!
  10. 关于ueditor多图上传加水印