文章目录
- 变量的定义及使用
- 基本数据类型
- 整型
- 浮点型
- 字符类型
- 布尔类型
- string类型
- 基本数据类型转换
- 指针类型
- 值类型和引用类型
- 标识符及命名规范
- 标识符
- 命名规范
变量的定义及使用
变量定义语法: var 变量名 数据类型
局部变量:定义在语句块中(如方法)的变量
全局变量:定义在语句块外的变量
变量声明方式:
- 指定变量类型,声明后如果不赋值则使用默认值
- 根据值自行判断变量类型
- 省略var 使用 := 赋值,左侧变量不能是已经声明过的,否则报错
- 支持多变量声明(局部变量和全局变量都支持),见示例代码
示例代码
基本数据类型
基本数据类型,包括
1)数值型:整型:int、int8、int16、int32、int64 浮点型:float32、float64
2)字符型:没有专门字符型,用byte来保存单个字母字符
3)布尔型: true false
4)字符串:String 官方将字符串定义为基本类型
派生/复杂数据类型,包括:
1)指针 pointer
2)数组
3)结构体 struct
4)管道 Channel
5)函数
6)切片 slice
7)接口 interface
8)map
整型
存放整数的变量,包括有符号整型、无符号整型、其他类型整型,默认值0
有符号整型:
无符号整型:
其他类型整型:
示例代码:
注意点
- int 和 uint 大小和系统有关,其他类型范围和系统无关
- 整数声明默认类型是整形
- 通过如下方式查看变量大小和占用字节数
fmt.Printf(“i3的类型 %T 占用的字节数是 %d”, i3, unsafe.Sizeof(i3)) - Golang 程序中整型变量在使用时,在满足程序正常运行的前提下尽量使用占用空间小的数据类型
浮点型
用来存放小数的数据类型
浮点类型在机器中的保存形式:浮点数=符号位+指数位+尾数位
默认值0
分类
示例代码
注意点
- 浮点数是有符号的
- 位数部分可能会丢失,造成精度丢失 float64精度不float32要高
- 浮点类型默认声明为 float64
- 浮点型两种常用的表示形式:
十进制:5.12 .512 必须有小数点
科学计数法:5.123e2 = 5.12*10的2次方 5.123E-2 = 5.12/10 的2次方 E 可以大写也可以小写
字符类型
Golang中没有专门的字符类型,如果要存储某个字符一般使用byte来保存,字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串室友单个字节连接起来的。
示例代码
注意点
- 如果我们保存的字符在 ascii表中,可以直接保存到byte,如果字符的对应码大于255 可以使用int类型保存。
- go语言中的字符使用UTF-8 编码(英文1字节 汉字3字节),如果想查询字符对应的utf-8码值 访问: http://www.mytju.com/classcode/tools/encode_utf8.asp
- go中字符本质上是一个整数,直接输出时是输出该字符对应的UTF-8 编码的值。输出字符需要格式化输出 fmt.Printf(“c2= %c c1= %c”,c2,c1)
- 可以直接将整数赋值给变量然后格式化输出对应字符
- 字符类型是可以进行运算的相当于一个整数。
- 字符型 存储到计算机中 需要将字符对应的码值 转换为2进制进行存储。
存储:字符 ->码值-> 二进制-> 存储 读取:和存储刚好相反 - 字符和码值的关系是通过字符编码表确定的(事先约定好的)
- Go语言编码统一使用utf-8 非常方便 没有乱码的困扰
布尔类型
bool类型只允许 true 和 false 两种取值,占一个字节,
默认值:false
示例代码
string类型
字符串是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。字节使用UTF-8编码标识Unicode文本
默认值:""
示例代码
注意点
- 字符串赋值后不能修改 其内容(其中某个字节内容)
- 两种字符串定义方式 “123\n”
123\n
(不会转义字符)
基本数据类型转换
Golang中不支持变量类型的自动转换,必须显式转换
基本语法: 表达式 T(v) 将值v 转换为类型T
示例代码
注意点
- 普通类型转字符串两种方式
调用fmt.Sprintf("%t",b)
调用 strconv.FormatBool(b) - 字符串转普通类型 直接嗲用strconv包的方法,如: strconv.ParseInt(ss,10,64)
- 字符串转基本类型时要确保字符串格式正确,如不能吧hello 转成int类型, 其他类型也类似 float 转为0 boolean 转为false
指针类型
基本数据类型变量存的是值也叫值类型。指针变量存的是一个地址,这个地址指向的空间存的才是值。
示例代码
注意点
- 获取变量地址 用 &符号 ,如: &num 就是num变量值保存的地址
- 指针类型表示的是一个内存地址,所有值类型(包括:整型、浮点型、bool型、string 数组、结构体)的变量都有对应的指针类型,形式为:*变量类型,如: *int * int8 * int32 * int64 * float32
- 获取指针变量 所保存地址的值 使用 * ,如:*ptr 获取指针ptr 指向地址中保存的值
值类型和引用类型
值类型:包括:整型、浮点型、bool型、string 数组、结构体 变量地址中直接保存值,内存通常在栈中分配,内存示意图如下:
引用类型:变量存储的是一个地址,这个地址对应的空间保存的才是真正的值,当没有任何变量引用这个地址时 该值会作为来及被回收。通常在堆区分配空间,内存示意图如下:
标识符及命名规范
标识符
Golang 对各种变量、方法、函数等的命名使用的字符串成为标识符
命名规则
- 由大小写字母、0-9和_ 组成
- 数字不可以开头
- 严格区分大小写
- 不能包含空格
- 单个下划线"_",在Go中是一个特殊的标识符,称为空标识符,可以代表任何标识符,仅做占位使用,无法通过这个标识符进行变量或方法的调用(它代表的取值永远不会被调用)如:方法返回多个值,有的值不需要时 可以使用 _ 来占位 。仅做占位符,不做标识符用
命名规范
- 包名和目录保持一致,尽量采用简短有意义的包名,不用和标准包冲突
- 变量函数等使用驼峰命名法
- Go中如果变量、函数、常量名首字母大写,则表示可以被其他包访问(相当于java中的public)。否则只能在本包使用(相当于 protected private 等)
- 不使用保留关键字和预定义标识符
保留关键字
预定义标识符