DAY2 GOLANG(二)运算符和程序流程控制

aside section._1OhGeD · · 590 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

标识符

命名变量,函数等)

一些规范:

不能以数字开头,_代表空标识符

包名:保持package和目录一致,

变量名,函数名,常量名:采用驼峰法

首字母大写是公有的,首字母小写是私有的

跨包使用,包名+变量名 (与文件名无关)


算数运算符

/除法    %取余数

10/4 =2        10.0/4 =2.5        如果希望保留小数部分被保留,则需浮点型参与运算

i++,i--  自增或者自减只能独立使用     

i=i++    错                             i++      对

且golang中只有后加加(或后减减),没有前加加(或前减减)


逻辑运算符

与: &&(全真为真)      或:|| (有真为真)    非: !

&&又称,短路与,如果第一条件为false,则第二条件不会判断,且最终结果为false

|| 又称,短路或:,如果第一条件为true,则第二条件不会判断,且最终结果为true



赋值运算符

先运算,然后把运算后的值赋给指定变量

键盘输入语句,获取用户信息

法一:使用 fmt.Scanln()

法二:使用 fmt.Scanf()获取


原码,反码和补码

1-------->[0000 0001]      2-------->[1000 0001]    二进制的最高位是符号位,0表正数,一表负数

-正数的原码,反码,补码都一样

-负数的反码=它的原码符号位不变,其他位取反  (0->1,1->0)

-负数的补码=它的反码+1

-0的反码,补码都是0

-计算机运算的时候,都是补码运算    1+1=1+(-1)

位运算符

按位与&    全为1,结果为1,否则为0

按位或|      有1,结果为1,否则为0

按位异或^  一个为1,一个为0,结果为1,否则为0


移位运算符

右移 >> 低位溢出,符号位不变,并用符号位补溢出的高位

左移<< 符号位不变,低位补0


流程控制

1)顺序控制

2)  分支控制  if -else

3)循环控制

官方推荐:  条件表达式外面,不用加括号

if(x>2),要求写成 if x>2

官方禁止:条件表达式不能为赋值语句,只能为判断语句

if b = false (错误)

单分支

if 条件表达式 {

执行代码块

}

说明:当条件表达为true时,执行{}的代码,{}大括号不能省略

golang支持在if中,直接定义变量,如下

if  age : = 20; age > 18 {

fmt.Println("abc")

}

双分支

(双分支只会执行其中的一个分支,要么代码块1,要么代码块2)

(else不能换行)

if 条件表达式 {

执行代码块1

}else{

执行代码块2

}

多分支

if 条件表达式1 {

执行代码块1

}else if 条件表达式2{

执行代码块2

}....

else{

执行代码n

}

多分支的判断流程

1)先判断条件表达式1,如果为真,就执行代码块1

2)如果条件表达式1为假,就去判断条件表达式2是否成立,如果条件表达式2为真,就执行代码块2

3)依此类推

4)如果全部都不成立,则执行else语句

else不是必须的

多分支最终也只有一个执行入口,最终只会执行一个执行代码块

当第一个条件不满足时,才会去执行第二个条件表达式,

执行代码块执行了,就退出去了。

嵌套分支

if else  里面嵌套又一个 if else

switch分支

每一个case都是唯一的,匹配项后面不加break

switch 表达式 {

case 表达式1,表达式2,...:

语句块1

case 表达式3,表达式4,...':

语句块2       

default:

语句块

}

1)先执行表达式,得到值,然后和case表达式进行比较,如果相等,就匹配成功,

然后执行case的语句块,然后退出switch控制。

2)如果switch的表达式没有和任何的case的表达式匹配成功,则执行default语句,然后退出switch控制。

3)golang的case后的表达式可以有多个,使用 逗号隔开

4)case语句块不需要break,默认会有,即在默认情况下,当程序执行完case语句块后,就直接退出该switch控制结构。

5)switch的表达式和case的表达式要相同

6)default语句不是必须的

总结:

具体判断:switch

区间判断:if



for循环控制

for 循环变量初始化;循环条件;循环变量迭代{

循环操作(语句)

}

保证四要素

for循环语句的判断

1)循环变量的初始化, 定义循环变量并且赋值 i:=1

2)执行循环条件,判断是否满足

3)若循环条件为真,执行循环操作

4)执行循环变量迭代,如i++

5)反复执行2,3,4直到循环条件为假,退出for循环

循环条件是返回一个布尔值的表达式


for循环的第一种写法

for i : = 1 ; i <= 10 ; i ++{

fmt.Println(" 你好")

}

for循环的第二种写法

j : = 1

for j < = 10{

fmt.Println("你好")

j++

}


字符串遍历


方式一 传统方式

var str string = "hello world"

for i :=0; i<len(str); i++{  

fmt.Printf("%c\n",str[i])

​}

方式二 for-range

str ="abc~ok"

for i, val := range str {  

fmt.Printf("index=%d, val=%c \n", i ,val)


输出结果:

i=0, val=a

i=1, val=b

i=2, val=c

i=3, val=~

i=4, val=o

i=5, val=k


补充

如果字符串含有中文,传统的遍历字符串方式,就会错误,出现乱码。原因是传统的对字符串的遍历是按照字节,而一个汉字在utf8编码是对应3个字节。


解决方案:将str转成[]rune 切片

var  str2 = [ ] rune (str)

传统方式使用字节方式遍历,for-range 方式使用字符遍历(可以直接识别中文)




break

当和for语句一起使用时

1)break 会默认跳出最近的for循环

2)break 后面加指定标签,跳出标签后面的for循环

continue 

continue 语句用于结束本次循环,继续下一次循环,

不再执行循环体下面的代码了,后面的代码不执行了,结束本次循环,到下一次循环迭代,继续执行下一次循环。

continue 和break一样,可以通过后面加指定标签,指明跳过的是哪一个循环,不同的是break是终止整个循环,continue是终止本次循环,进入下次循环


return 表示跳出所在的方法或函数。

如果return是在普通的函数,则跳出该函数,即不再执行函数中return后面代码,也可以理解成终止函数。

return如果在main函数中,表示终止main函数,即结束程序。


其他

-整个程序执行的顺序:main函数的执行顺序

-跳转控制语句-goto (少用)

无条件跳转到指定行


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:aside section._1OhGeD

查看原文:DAY2 GOLANG(二)运算符和程序流程控制

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

590 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传