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

标识符

命名变量,函数等)

一些规范:

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

包名:保持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 (少用)

无条件跳转到指定行

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,340评论 0 2
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,776评论 0 38
  • Swift 提供了类似 C 语言的流程控制结构,包括可以多次执行任务的for和while循环,基于特定条件选择执行...
    穷人家的孩纸阅读 697评论 1 1
  • 自行创建一个员工信息表info,里面记录着员工姓名,年龄,地址以及工资,下面的实验要使用。 mysql> crea...
    张伟科阅读 1,352评论 0 2
  • 在当前的态势下,关注外汇占款的变化,也许能给股市投资提供一种新的思路。 5月14日,央行官网公布的数据显示,截至4...
    七年蝉龟阅读 930评论 2 4