注意事项
- Go源文件以 go 为扩展名
- Go应用程序的执行入口是main()函数
- Go语言严格区分大小写
- Go方法由一条条语句构成,每条语句后不需要分好(Go语言会在每行后自动添加分号),这也体现Golang的简洁性
- Go编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一个,否则报错
- Go语言定义的变量或者import的包如果没有使用到,代码不能编译通过。
- 大括号都是成对出现的,缺一不可
- 一行最大不超过80字符,超过使用换行展示,保持格式优雅
转义字符
字符 | 描述 |
---|---|
\t |
一个制表符,实现对齐功能 |
\n |
换行符 |
\\ |
一个\ |
\" |
一个" |
\r |
一个回车,不是换行,回车后面的内容覆盖字符串前面的内容fmt.Println("1234567\rabc") 结果为abc4567 |
注释
//
行注释
/**/
块注释
变量声明定义
1 | // 逐个逐个地定义全局变量 |
命名规范
- 保持包名和目录一致
- 变量名、函数名、常量名采用驼峰法
- 如果变量名、函数名、常量名首字母大写,则可以被其他包访问(类似别的语言的public);如果首字母消息,则只能本包钟使用(类似别的语言的private)
保留关键字
关键字 | 描述 |
---|---|
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 |
预定标识符
标识符 | 描述 |
---|---|
append | |
bool | |
byte | |
cap | |
close | |
complex | |
complex64 | |
complex128 | |
uint16 | |
copy | |
false | |
float32 | |
float64 | |
imag | |
int | |
int8 | |
int16 | |
int32 | |
int64 | |
uint | |
uint8 | |
uint16 | |
uint32 | |
uint64 | |
itoa | |
len | |
make | |
new | |
nil | |
panic | |
println | |
real | |
recover | |
string | |
true | |
uintptr |
运算符
Go不支持三元运算符
算术运算符
运算符 | 描述 | 范例 |
---|---|---|
+ |
正号 | +3 |
- |
负号 | -3 |
+ |
加 | 3+3 |
- |
减 | 3-3 |
* |
乘 | 3*3 |
/ |
除,整数之间做除法时,只保留整数部分舍弃小数部分 | 3/3 |
% |
取模 | 3%3 |
++ |
自增,只能写在变量后,只能独立使用而不可进行赋值 | a++ |
-- |
自减,只能写在变量后,只能独立使用而不可进行赋值 | a-- |
+ |
字符串相加 | "hello" + "world" |
关系运算符
运算符 | 描述 | 范例 |
---|---|---|
== |
相等于 | 4==3 |
!= |
不等于 | 4!=3 |
< |
小于 | 4<3 |
> |
大于 | 4>4 |
<= |
小于等于 | 4<=3 |
>= |
大于等于 | 4>=3 |
逻辑运算符
用于连接多个条件,最终的结果是bool值
运算符 | 描述 | 范例 |
---|---|---|
&& |
逻辑与,如果两边的操作数都是true,则为true;否则为false | A&&B |
|| |
逻辑或,若果两边的操作数有一个是true,则为true;否则为false | A||B |
! |
逻辑非,如果条件为true,则为false;否则为true | !(A&&B) |
赋值运算符
赋值运算符就是将某个运算后的值,赋给指定的变量
运算符 | 描述 | 范例 |
---|---|---|
= |
简单的赋值运算符,将一个表达式的值赋给一个左值 | C=A+B |
+= |
相加后再赋值 | C+=A等于C=C+A |
-= |
相减后再赋值 | C-=A等于C=C-A |
*= |
相乘后再赋值 | C*=A等于C=C*A |
/= |
相除后再赋值 | C/=A等于C=C/A |
%= |
求余后再赋值 | C%=A等于C=C%A |
<<= |
左移后赋值 | C<<=2等于C=C<<2 |
>>= |
右移后赋值 | C>>=2等于C=C>>2 |
&= |
按位与后赋值 | C&=2等于C=C&2 |
^= |
按位异后赋值 | C^=2等于C=C^2 |
|= |
按位或后赋值 | C|=2等于C=C|2 |
位运算符
运算符 | 描述 | 范例 |
---|---|---|
& |
按位与,参与运算的两数各对应的二进制相与,同为1结果为1,否则0 | A=A&C |
| |
按位或,参与运算的两数各对应的二进制相或,有一个为1结果为1,否则0 | A=A|C |
^ |
按位异或,参与运算的两数各对应的二进制相 异或,有二进为不同时,结果为1,否则0 | A=A^C |
<< |
左移,左移n位就是乘以2的n次方 | A=A<<2 |
>> |
右移,右移n位就是除以2的n次方 | A=A>>2 |
其他运算符
运算符 | 描述 | 范例 |
---|---|---|
& |
返回变量存储地址 | &a |
* |
指针变量 | *a |
进制
进制 | 描述 |
---|---|
二进制 | 0,1表示,满2进1 |
十进制 | 0-9,满10进1 |
八进制 | 0-7,满8进1,以数值0开始表示 |
十六进制 | 0-9及A-F,满16进1,以0x或0X开头表示 |
二进制
原码、反码、补码
- 二进制的最高为是符号位。0表示整数,1表示负数
- 正数的源码,反码,补码一样
- 1 的原码 0000 0001
- 1 的反码 0000 0001
- 1 的补码 0000 0001
- 负数的反码等于它源码符号位不变,其他位取反
- 负数的补码等于它的反码+1
- -1 的原码 1000 0001
- -1 的反码 1111 0001
- -1 的补码 1111 1111
- 0的反码补码都是0
- 在计算机运算的时候,都是以补码的方式来运算的
- -2^2 => 补码(1111 1110)^(0000 0010)
- => 补码(1111 1100)
- => 反码(1111 1011)
- => 原码(1000 0100)
- => -4
程序流程控制
Go 没有while和do while
if-else
1 | package main |
switch
基本介绍
- switch语句用于基于不同条件执行不同动作,每个case分支都是唯一的,从上到下直到匹配为止
- 匹配项后面不需要加break
- switch后可以不带表达式,类似if-else分支使用
- switch语句可以被用于type-switch来判断某个interface变量中实际指向的变量类型
1 | package main |
for
1 | package main |
break
break要点
- break默认会跳出最近的for循环
- break后面可以指定标签,跳出标签对应的for循环
1 | package main |
continue
continue要点
- continue默认用于结束本次循环,继续执行下一次循环
- continue后面可以指定标签,指明要跳过的是哪一层循环,与break不同continue不会跳出循环
1 | package main |
goto
goto要点
- goto语句可以无条件地转移到程序中指定的行
- 一般不建议使用,以免造成程序流程的混乱
1 | package main |
常量
- 基本语法
1 | const 常量名 [类型] = 值 |
常量要点
- 常量使用const修饰
- 常量在定义的时候,必须初始化
- 常量不能修改
- 常量只能是bool、数值类型、string类型
- go中没有常量名必须字母全大小的要求 例如 NAME
- 常量依然通过首字母大小写控制访问范围
- 数值类型自增的时候可以使用 itoa 表示值
1 | package main |