文章目录
Go基础
1. 代码运行
程序的执行分为两步:1. 编译 2.执行
1. 1 编译
编译的操作步骤:点击 “编译” 菜单,选择 “Build” (或者直接按快捷键Ctrl+B).编译的目的是检查我们写的代码是否出错,如果没有出错,那么会提示“成功”,并且在我们程序所在的目录生成一个.exe文件,该文件就是可执行文件。如果出错那么会显示错误信息,并且不会生成.exe文件
1.2 执行
编译操作完成后,我们就可以执行我们的代码了,选择“编译”菜单中的”Run”,执行。执行的就是编译所生成的.exe文件。如果不执行“Build”,直接执行”Run”,可以吗?不可以,因为不执行”Build”就无法生成”.exe”文件,那么也就无法执行。最后,为了方便高效可以选择“Run”,这个选项,将编译与执行放在一起操作。
1.3 其它注意事项:
强制左花括号{的放置位置,如果把左花括号{另起一行放置,这样做的结果是Go编译器报告编译错误。
每行代码占一行。
2. 注释
2.1 单行注释 //注释内容
2.2 多行注释 /* 注释内容 */
通过用自己熟悉的语言(例如,汉语),在程序中对某些代码进行标注说明,这就是注释的作用,能够大大增强程序的可读性。
3. 变量
所谓的变量简单的理解就是计算机用来存储数据的
3.1 变量类型
在定义变量时就要告诉计算机,定义的变量存储是什么类型的数据。那么在内存中就可以根据不同的类型来开辟不同的存储空间。
3.2 变量声明
所谓声明变量就是创建一个变量,并且指定该变量存储什么类型的数据。
Go语言引入了关键字var,而类型信息放在变量名之后,示例如下:
//1.声明格式 var 变量名 类型
//注意:变量声明了,必须要使用,否则报错
//同一个{}里,声明的变量名是惟一的
var a int
//可以同时声明多个变量,中间用逗号隔开
var b, c int
3.3 变量初始化
在定义变量时,就给变量赋值,这种方式就是变量的初始化
//var 变量名 数据类型 = 值
var b int = 10
注意:在这里我们将”=”符号,读作“赋值号”,不能读作“等号”
3.4 变量赋值
除了在定义变量时,完成初始化以外,我们也可以在变量定义完后,再给变量赋值,也就是先声明后赋值,示例如下:
//变量名 = 值
var a, b int
b = 10
c = 20
fmt.Println(b, c) //输出10 20
3.5 自动推导类型
所谓自动推导类型,就是不用通过var 声明变量,不用指定类型,直接在变量名后面跟”:”号,同时完成赋值。这种方式,也是我们以后开发过程中最常用的方式。
//变量名 := 值
a := 30
3.6 多重赋值匿名变量
- 多重赋值
//将1的值赋值给a,将10的值赋值给b,将30的值赋值给c.
a, b, c := 1, 2, 3
- 匿名变量
_匿名变量,丢弃数据不进行处理, _匿名变量配合函数返回值使用才有价值
_, b, _, d := 1, 2, 3, 4 // b 2, d 4
3.7 数据置换
a, b := 10, 20 // a 10, b 20
a, b = b, a // a 20, b 10
3.8 输出格式
fmt.print("a") //输出不换行
fmt.Println("a")//输出并换行
fmt.Printf("%s", "a") //格式化输出
3.9 接收输入
var age int
//第一个参数,所输入的数据对应类型
fmt.Scanf("%d", &age) //注意age变量前面一定要加上“&”符号,表示获取内存单元的地址,然后才能够存储。
或
fmt.Scan(&age)
//接受一行字符串输入
str, err = bufio.NewReader(os.Stdin).ReadString('\n')
3.10 变量命名规范
- 变量命名规范要求
- 名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。大写字母和小写字母是不同的:heapSort和Heapsort是两个不同的名字。
- GO语言自己特有的,具有一定含义的一些字符,也不能作为变量名称。例如func,fmt,print等等,这些都是GO自带的,具有特殊含义的字符,我们称为关键字。
- 此外,还有大约30多个预定义的名字,比如int和true等
- 见名知意
- 驼峰命名法
小驼峰式命名法(lower camel case) myName
大驼峰式命名法(upper camel case) FirstName
4. 基本类型
4.1 基本类型
类型 | 名称 | 长度 | 零值 | 说明 |
---|---|---|---|---|
bool | 布尔类型 | 1 | false | 其值不为真即为假,不可以用数字代表true或false |
int, uint | 整型 | - | 0 | 32位或64位 根据操作系统系统 |
int8 | 整型 | 1 | 0 | -128 ~ 127, |
uint8 | 整型 | 1 | 0 | 0 ~ 255 |
int16 | 整型 | 2 | 0 | -32768 ~ 32767, |
uint16 | 整型 | 2 | 0 | 0 ~ 65535 |
int32 | 整型 | 4 | 0 | -2147483648 到 2147483647 |
uint32 | 整型 | 4 | 0 | 0 到 4294967295(42亿) |
int64 | 整型 | 8 | 0 | -9223372036854775808到 92233720368547758070 |
uint64 | 整型 | 8 | 0 | 0到 18446744073709551615(1844京) |
byte | 整型 | 1 | 0 | 代表了 ASCII 码的一个字符。 源码:type byte = uint8 |
rune | 整型 | 4 | 0 | 代表一个 UTF-8 字符。当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型实际是一个 int32。 源码:type rune= uint32 |
uintptr | 整型 | 8 | 0 | 用于存放一个指针 |
float32 | 浮点型 | 4 | 0.0 | IEEE-75432 位浮点数 |
float64 | 浮点型 | 8 | 0.0 | IEEE-75464 位浮点数 |
complex64 | 浮点型 | 8 | 0.0 + 0.0i | 32 位实数和虚数; |
complex128 | 浮点型 | 16 | 0.0 + 0.0i | 64 位实数和虚数; |
string | 字符串 | “” | utf-8字符串 |
4.2 fmt输入输出格式化
格式 | 含义 |
---|---|
%% | 一个%字面量 |
%b | 一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数 |
%c | 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 |
%d | 一个十进制数值(基数为10) |
%f | 以标准记数法表示的浮点数或者复数值 |
%o | 一个以八进制表示的数字(基数为8) |
%p | 以十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示 |
%q | 使用Go语法以及必须时使用转义,以双引号括起来的字符串或者字节切片[]byte,或者是以单引号括起来的数字 |
%s | 字符串。输出字符串中的字符直至字符串中的空字符(字符串以’\0‘结尾,这个’\0’即空字符) |
%t | 以true或者false输出的布尔值 |
%T | 使用Go语法输出的值的类型 |
%x | 以十六进制表示的整型值(基数为十六),数字a-f使用小写表示 |
%X | 以十六进制表示的整型值(基数为十六),数字A-F使用小写表示 |
5. 常量
5.1 常量定义使用
//在程序运行过程中其值不能发生改变的量 称为常量
//常量定义 const 常量名 数据类型 = 值
const a int = 10
或
//自动推导类型 在定义常量时 可以省略数据类型
const a = 10
注意:
- 定义常量时 不允许使用:=
- 不能获取常量地址
5.2 字面常量
所谓字面常量(literal),是指程序中硬编码的常量
123 整型常量
3.1415 浮点类型常量
3.14 + 12i 复数类型常量
true 布尔类型常量
“abc” 字符串类型常量
5.3 iota枚举
//常量的集合 枚举
const(
A = iota //0
B = iota //1
C = iota //2
)
//项目中的常用方式,不要讲iota与其他字面常量混合使用
const (
A = iota //0
B //1
C //2
)
const (
A,B = iota, iota//0, 0
C,D //1, 1
E,F //2, 2
)
const (
A = iota //0
B //1
C = 33 //33
D //33
)
6. 运算符
GO语言中常见的运算符有算术运算符,赋值运算符,关系运算符,逻辑运算符等。
注意:类型转换 方式:转换类型(被转换数据)
Go语言中不允许隐式转换,所有类型转换必须显式声明(强制转换),而且转换只能发生在两种相互兼容的类型之间
6.1 算术运算符
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
+ | 加 | 10 + 5 | 15 |
- | 减 | 10 - 5 | 5 |
* | 乘 | 10 * 5 | 50 |
/ | 除 | 10 / 5 | 2 |
% | 取模(取余) | 10 % 3 | 1(正负由被除数相同) |
++ | 后自增,没有前自增 | a=0; a++ | a=1 |
– | 后自减,没有前自减 | a=2; a– | a=1 |
6.2 赋值运算符
=是普通赋值,+=,-=等称为“复合赋值运算符”
运算符 | 说明 | 示例 |
---|---|---|
= | 普通赋值 | c = a + b 将 a + b 表达式结果赋值给 c |
+= | 相加后再赋值 | 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 |
6.3 关系运算符
关系运算的结果是布尔类型的。
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
== | 相等于 | 4 == 3 | false |
!= | 不等于 | 4 != 3 | true |
< | 小于 | 4 < 3 | false |
> | 大于 | 4 > 3 | true |
<= | 小于等于 | 4 <= 3 | false |
>= | 大于等于 | 4 >= 1 | true |
6.4 逻辑运算符
- 有逻辑运算符连接的表达式叫做逻辑表达式
- 逻辑表达式的结果同样也是bool类型
- 逻辑运算符两边放的一般都是关系表达式或者bool类型的值
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
! | 非 | !a | 如果a为假,则!a为真;如果a为真,则!a为假。 |
&& | 与 | a && b | 如果a和b都为真,则结果为真,否则为假。 |
| | 或 | a || b | 如果a和b有一个为真,则结果为真,二者都为假时,结果为假。 |
6.5 其他运算符
运算符 | 术语 | 示例 | 说明 |
---|---|---|---|
& | 取地址运算符(引用运算符) | &a | 变量a的地址 |
* | 取值运算符(解引用运算符) | *a | 指针变量a所指向内存的值 |
6.6 运算符优先级
优先级 | 运算符 |
---|---|
特殊运算符 | () [] . |
单目运算符 | ++ -- ! 类型转换(变量) |
双目运算符 | 算数运算符 * / % + - 关系运算符 == != > < >= <= 逻辑运算符 && || 赋值运算符 = += -= *= /= %= |