一、变量的概念和使用
go语言的特性:
静态语言:强类型语言
go、java、c++、c#...
动态语言:弱类型语言
JavaScript、ptp、 python、ruby...
变量的本质,就是一小块内存,用于存储数据,在程序运行过程中数值可以改变
使用:
step1: 变量的声明,也叫定义
step2: 变量的访问,赋值和取值
//第一种先定义后赋值
var name type
name = name
//第二种:类型推断
var name = "王二狗"
//第三种: 简短声明,省略var
name := "王二狗"
二、变量的内存分析和注意事项
1、变量必须先定义才能使用
2、变量的类型和赋值必须一致
3、同一个作用域内,变量名不能冲突
4、简短的定义方式,左边的变量至少有一个是新的
5、简短定义方式不能使用于全局变量的定义
var num int
num = 100
fmt.Printf("num的数值:%d, 地址是%p\n", num, &num)
num = 200
fmt.Printf("num的数值:%d, 地址是%p\n", num, &num)
此时num的值被改变,但是对应在计算机中的内存地址没有发生改变
三、常量的使用
1、概念:同变量类似,陈那个徐执行过程中数值不能改变
2、语法:
显式类型定义
隐式类型定义
3、固定的数值:
100, "abc"
4、一组常量中,如果某个常量没有初始值,默认和上一行一致
const {
a int = 100
b
c string = "ruby"
d
e
}
5、枚举类型:使用常量组作为枚举类型,一组相关数值的数据
四、ioat关键字
特殊的常量,可以被编译器自动修改的常量
每当定义一个const,ioat的初始值为0
每当定义一个产量,就会自动累加1
直到下一个const常量出现,清零
const {
a = ioat //0
b = ioat //1
c = ioat // 2
}
const {
d = ioat //0
e //1
}
清晰明了简介
const {
A = ioat //0
B //1
C //2
D = "haha" //ioat = 3
E //haha ioat = 4
F = 100 // ioat = 5
G //100 ioat = 6
H = ioat //7
I //ioat 8
}
const {
J = ioat //0
}
五、基本数据类型
1、布尔类型: bool
取值:true false
2、数值类型 :
整数 : int
有符号:最高位表示符号位,0为正数,1为负数,其余位表示数值
int8: -128~127
int16: -32768~32767
int32: -2147483648~2147483647
int64:-9223372036854775808~9223372036854775807
无符号:所有位表示数值
uint8: 0~255
uint16: 0~65536
uint32: 0~4294967295
uint64: 0~18446744073709551615
byte:uint8
rune: int32
浮点:生活中的小数
float32
float64
复数:complex
3、字符串: string
复合数据类型: array、slice、map、function、pointer、struct、interface、channel...
六、字符串型
1、概念:多个byte的集合,理解为一个字符序列
2、语法:使用双引号
"abc" "ABC" "A"
也可以使用''
3、编码问题
计算机本质识别0和1
A:65 B:66 C:67
a:97
ACSII(美国标准信息交换码)
Unicode编码表:号称统一了全世界
UTF-8、UTF-16、UTF-32...
4、转义字符:\
A:有一些字符,有特殊的作用,可以转义为普通的字符
B:有一些字符,就是一个普通的字符,转义后有特殊的作用,换行等
七、基本数据类型的转换
兼容类型可以转换
常数:在有需要的时候,自动转换
变量:需要手动转换
八、算术运算符
+,-,*,/,%,++, --
位运算符等等
九、键盘输入和打印输出
输出:
Print() //打印
Printf() //格式化打印
Printfln() //打印之后换行
格式化打印占位符:
https://studygolang.com/articles/20310
十、切片的语法
var identifier [] type
切片不需要说明长度
或者使用make()函数进行处理, func make(t Type, size ... IntegerType) Type
第一个参数:类型
slice、map、chan
第二个参数:长度len
实际存储元素的数量
第三个参数:容量cap
最多能够存储的元素个数
slice的内存分析
1、每一个切片引用了一个底层数组
2、切片本身不存在任何数据,都是这个底层数组存储,所以修改切片也就是修改这个数组中的数据
3、当向切片中添加数据时,使用append(append(s1, elems:6,7,8))如果没有超过容量,直接添加,如果超过容量,自动扩容(成倍增长)
4、切片一旦扩容,就是重新指向一个新的底层数组
在已有数组上进行切片使用
a := [10]int{1,2,3,4,5,6,7,8,9,10}
s1 := a[:5]
那么对于的s1的长度为5,容量为10,如果改变s1的内的数值,那么对应的a也会发生改变