标识符
(命名变量,函数等)
一些规范:
不能以数字开头,_代表空标识符
包名:保持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 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 (少用) 无条件跳转到指定行其他