基本类型的使用
基本介绍
3.8整数的各个类型
func main(){
var i int = 1
fmt.Println("i=", i)
var j int8 = 127
fmt.Println("j=", j)
}
int的无符号的类型:
整型的使用细节
一、Golang各整数部分:有符号和无符号,int uint 的大小和系统有关
二、Golang的整型默认声明为int型
var n1 = 100//n1是什么类型
//fmt.Printf()可以用于做格式化输出
fmt.Printf("n1 的类型是 %T",n1)
````
#### 三、如何在程序查看某个变量的字节大小和数据类型(使用较多)
int 默认是64位
````go
package main
import (
"fmt"
"unsafe"
)
func main() {
var n1 = 100//n1是什么类型
//fmt.Printf()可以用于做格式化输出
fmt.Printf("n1 的类型是 %T",n1)
var n2 int64 = 10
fmt.Printf("n2 的类型 %T n2占用的字节数是%d",n2,unsafe.Sizeof(n2))
}
四、Golang程序中整型变量在使用时,遵守保小不保大的原则,即:在保证程序正确运行下,尽量使用占用空间小的数据类型「如:年龄」
var age byte = 100
五、bit:计算机中的最小存储单位。byte:计算机中基本存储单元。「二进制」
1byte=8bit
3.9 小数类型/浮点类型
小数类型就是用于存放小数的,比如 1.2. 0.23-1.911
案例:
var price float32 = 89.12
fmt.Println("price=",price)
小数类型分类
说明
- 1、关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位. 3.56 11110000111.111111111111111111000
说明浮点数都是有符号的
- 2、尾数部分可能丢失,会有精度损失
float64比float32精度要高,说明我们要保存一个精度高的数字,则应该选择float64
浮点型的使用细节
-
1、golang浮点类型有固定的范围和字段长度,不受具体OS的影响
-
2、golang 的浮点型默认声明为float64类型
-
3、浮点型常量有两种变现形式
- 十进制数形式,如:5.12 .512(必须有小数点)
- 科学技术法形式:如:5.1234e2 = 5.12 * 10 的2次方。5.12E-2 = 5.12/10的2次方
- 十进制数形式,如:5.12 .512(必须有小数点)
-
4、通常情况下,应该使用float64,因它比float32更精确,
3.10字符类型(char)
基本介绍
golang中没有专门的字符类型如果要存储单个字符(字母),一般使用byte来保存。
字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节链接起来的。也就是说对于传统的字符串是由字符组成的,而Go的字符串不同,它是由字节组成的。
案例演示:
说明:
1)如果保存的字符在ASCII中,比如[0-1,a-z,A-Z]直接可以保存到byte
2)如果保存的字符对应码值大于255,这时可以考虑使用int类型保存
3)如果需要按照字符的方式输出们需要格式化输出 fmt.Printf(“c3=%c,c3对应码值=%d”,c3,c3)
使用细节
1)字符常量使用单引号’'括起来的单个字符,例如,
var c1 byte 'a'
var c2 int '中'
var c3 byte = '9'
- Go中允许使用转义字符 ‘’ 来将其后的字符转变为特殊字符型常量,例如
var c3 char = '\n' // ‘\n’表示换行符
3) Go语言的字符使用UTF-8 编码,UTF8码值表http://www.mytju.com/classcode/tools/encode_utf8.asp
英文字母- 1个字节 汉字- 3个字节
4) 在Go中,字符的本质是一个整数,直接输出时,是该字符对应的UTF-8编码的码值
5) 可以直接给某个变量赋一个数字,然后按格式化输出时%c,会输出该数字对应的unicode字符
var c4 int =22269 //--->'国' 120 - 'x'
fmt.Printf("%c", c4)
6)字符可行是可以进行运算的,相当于一个整数,因为它都对应有Unicode码
字符类型本质探讨
1)字符型—存储到计算机中,需要将字符对应的码值(整数)找出来
- 存储: 字符—>对应码值—>二进制—>存储
- 读取:二进制—>码值—>字符—>读取
2)字符和码值的对应关系是通过字符编码表决定的(是规定好的)
3)Go语言的编码都统一成了utf8.非常方便,很统一,再也没有乱码的困扰了
3.11 布尔类型
基本介绍
- 布尔类型也叫bool类型,bool类型数据只允许取值true和false
2)bool类型占1个字节
3)bool类型适用于逻辑运算,一般用于程序流程控制 【注:后面详细讲解】
经常用于
- if条件控制语句
- for循环控制语句
案例演示
3.12 string 类型
基本介绍
字符串就是一串固定长度的字符连接起来的字符序列,Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码表示Unicode文本
案例演示
使用细节
1)Go语言的字符串的字节使用UTF-8编码表示Unicode文本,这样Golang统一使用UTF-8编码,中文乱码问题不会再困扰程序员
2)字符串一旦赋值了,字符串就不能修改了:在Go中字符串是不可变的
3)字符串的两种表示形式
- 双引号,会识别转义字符
- 反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果
案例演示
4)字符串拼接方式
5)当一行字符串太长时,需要使用到多行字符串,可以如下处理
3.13 基本数据类型的默认值
基本介绍
在go中,数据类型都有一个默认值,当程序员没有赋值时,就会保留默认值,在go 中,默认值又叫零值
基本数据类型的默认值如下
3.14基本数据类型的相互转换
基本介绍
Golang和java/c不通,Go在不同类型的变量之间赋值时需要显示转换。也就是说Golang中数据类型不能自动转换
基本语法
表达式T(v) 将值v转换为类型T
T :就是数据类型,比如int32、int64等等
v:就是需要转换的变量
案例演示
注意事项
1)Go中,数据类型的转换时可以从 表示范围小—>表示范围大,也可以 表示范围大—>表示范围小
2)被转换的是变量存储的数据(指),变量本身的数据类型并没有变化!
3)在转换中,比如将int64 转成int8 【-128–127】,编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样。因此在转换时,需要考虑范围。
课堂练习
练习1、
需要将飘红处改为
练习2、
3.15 基本数据类型和string的转换
基本介绍
在程序开发中,我们经常将基本数据类型转换成string或者将string转换成基本数据类型
基本类型==》string类型
- 方式1: fmt.Sprintf(“%参数”, 表达式)
函数的介绍:
参数需要和表达式的数据类型相匹配
fmt.Sprintf()。会返回转换后的字符串
案例演示:
- 方式2 :使用strconv包的函数
案例说明:
string类型转基本数据类型
- 使用strconv包的函数
案例演示
说明
note:因为返回的是int64或者float64 如果希望要得到int32、folat32等如下处理
string转基本数据类型的注意事项
在将string转成基本数据类型时,要确保string类型能够转成有效的数据,比如 我们可以将“123”,转成一个整数,但不能把“hello”转成一个整数,如果这样做,golang直接将其转成 0 ,其他类型也是一样的道理。float–〉0。 bool–〉0
3.16 指针
基本介绍
1)基本数据类型,变量存的就是值,也叫值类型
2)获取变量的地址,用&,比如:var num int, 获取num的地址:&num
分析一下基本数据类型在内存的布局
3)指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值
比如:var ptr *int = &num
举例说明:指针在内存的布局
4)获取指针类型所指向的值,使用 * 比如 :var ptr int 使用ptr获取ptr指向的值
5)一个案例再说明
案例演示
- 写一个程序,获取一个 int 变量 num 的地址,并显示到终端
- 将 num 的地址赋给指针 ptr , 并通过 ptr 去修改 num 的值.
课堂练习
指针的使用细节
1)值类型,都有对应的指针类型,形式为 *数据类型,比如int的对应的指针就是 int,float32 对应的指针类型就是float32。。。
2)值类型包括:基本数据类型 int系列,float系列,bool,string ,数组和结构体struct
3.17 值类型和引用类型
值类型和引用类型的说明
1)值类型:基本数据类型 int系列,float系列,bool,string ,数组和结构体struct
2)引用类型:指针、slice切片、map、管道chan、interface 等都是引用类型
值类型和引用类型的使用特点
1)值类型 :变量直接存储值,内存通常在栈中分配
2)引用类型 :变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为了一个垃圾,需要GC来回收
3)内存的栈区和堆区示意图
3.18 标识符的命名规范
标识符概念
1)Golang对各种变量、方法、函数等命名时使用的字符序列称为标识符
2)凡是可以自己起名字的地方都叫标识符
标识符的命名规则
- 由 26 个英文字母大小写,0-9 ,_ 组成 2) 数字不可以开头。var num int //ok var 3num int //error 3) Golang 中严格区分大小写。
var num int
var Num int
说明:在 golang中,num 和 Num 是两个不同的变量 4) 标识符不能包含空格。
- 下划线"_"本身在 Go 中是一个特殊的标识符,称为空标识符。可以代表任何其它的标识符,但 是它对应的值会被忽略(比如:忽略某个返回值)。所以仅能被作为占位符使用,不能作为标识符使用
- 不能以系统保留关键字作为标识符(一共有 25 个),比如 break,if 等等…
标识符的案例
hello // ok
hello12 //ok
1hello // error ,不能以数字开头
h-b // error ,不能使用 -
x h // error, 不能含有空格
h_4 // ok _ab // ok int // ok , 我们要求大家不要这样使用
float32 // ok , 我们要求大家不要这样使用
_ // error
Abc // ok
标识符命名注意事项
- 包名:保持 package 的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,不要和
标准库不要冲突 fmt
- 变量名、函数名、常量名:采用驼峰法
举例:
var stuName string = “tom” 形式: xxxYyyyyZzzz …
var goodPrice float32 = 1234.5 - 如果变量名、函数名、常量名首字母大写,则可以被其他的包访问;如果首字母小写,则只能
在本包中使用 ( 注:可以简单的理解成,首字母大写是公开的,首字母小写是私有的) ,在 golang 没有 public , private 等关键字。
案例演示: