go学习记录——第一天
go的基本组成部分
- 包声明
- 引入包
- 函数
- 变量
- 语句 & 表达式
- 注释
go变量声明
go中用var来声明变量,语法如下:
1 |
|
其中,variableName为变量名,dataType为变量的数据类型。
一次声明多个变量
1 |
|
第一种,指定变量类型,如果没有初始化则默认为0
1 |
|
第二种,不指定类型,由编译器自动推导
1 |
|
第三种,短变量声明,在函数内使用,注意当已经进行了变量声明再使用短声明会报错。短声明只适用于函数内使用,不能在全局作用域使用。
1 |
|
第四种,多变量声明
1 |
|
go常量声明
只能使用布尔型、数字型(int, float, 复数)和字符串型
常量定义格式
1 |
|
多个常量声明
1 |
|
常量中可以使用内置函数进行运算,如len(), cap(), unsafe.Sizeof()等。
inta
inta是go中的特殊常量,可以当作一个可以被编译成功的常量
inta在const关键词出现时将被重置为0,const中每加一行都将使inta加1。
inta可以做枚举值
1 |
|
inta也可以做一个类似行索引的功能
1 |
|
输出的结果就是a=0, b=1, c=2
。
inta用法
1 |
|
go的运算符
算数运算符
++ 自增,和+=1类似
– 自减,和-=1类似
别的和python一样
关系运算符
和python一样,直接忽略
逻辑运算符
&& -> and
|| -> or
! -> not
从字母换成了符号,其他没区别
位运算符
& -> 按位与
| -> 按位或
^ -> 按位异或
<< -> 左移
-> 右移
~ -> 按位取反
赋值运算符
- <<= -> 左移后赋值
= -> 右移后赋值
- &= -> 按位与后赋值
- |= -> 按位或后赋值
- ^= -> 按位异或后赋值
其他和python一样
其他运算符
- & -> 返回实际地址
- ‘*’ -> 指针变量
运算优先级
优先级 | 运算符 |
---|---|
1 一元运算符 | * &(取地址) +(正号) -(负号)! ~(按位异或) |
2 乘除类运算符 | * / % << >> &(按位与) &^(按位清除) |
3 加减类运算符 | + - ‘ |
4 关系运算符 | == != < <= > >= |
5 逻辑运算符 | && 逻辑或(符号markdown无法显示就用文字代替了) |
条件语句
和python一样,但编写方式有些不同
if
1 |
|
if…else
1 |
|
if…else if…else
1 |
|
switch
1 |
|
Type Swith
用于判断某个interface变量的实际类型
1 |
|
例子如下
1 |
|
fullthrough
强制执行case后语句,不会判断是否为true
即使用了fullthrough,也可以直接用break跳出switch
select
此select非彼select。不是SQL中的那个查看
这里的select虽然类似switch,但只能作用于通道,一个case只能进行接受或发送
select会监听每个通道,只要有一个case准备好了就立马执行。如果多个准备好就随机挑选一个。如果一个都没准备好执行default。
1 |
|
注意
- 每一个case都必须对应一个通道
- 所有channel表达式都会被求值
- 所有被发送的表达式都会被求值
- 如果有default则会在case均未准备好时执行。如果没有则会阻塞,直到有通道可以运行。Go不会重新对channel或值进行求值
今儿的就学到这里吧,感觉上在语句写法上和C类似。不过可能是我一直用Python所以还有点不习惯用花括号来作为代码块的感觉。慢慢习惯吧,今儿没啥心情,感觉学不下去了,休息咯~