整型
整型使用细节
- golang各整数类型分:有符号和无符号,int和uint的大小和系统有关。
- golang的整数默认声明为int型。
- 如何在程序中查看某个变量的字节大小和数据类型(使用较多)
package main
// import "fmt"
// import "unsafe"
// 可改写为以下形式
import (
"fmt"
"unsafe"
)
//golang中整数类型的使用
func main() {
var n1 = 100
//Printf()用于格式化输出
fmt.Printf("n1的数据类型为%T \n", n1)
//查看所占用的字节数
var n2 int64 = 200
fmt.Printf("n2 的数据类型为%T,所占用的字节数为%d", n2, unsafe.Sizeof(n2))
}
- golang程序中整型变量在使用时遵循保小不保大的原则,即:在保证程序正确运行下,尽量使用占用空间小的数据类型。
例如:年龄一般不会超过200岁,可以使用byte数据类型,来减少占用空间。当不确定时可以大一点。 - bit:计算机中的最小存储单位。byte:计算机中基本存储单元。1byte = 8bit
浮点类型
基本介绍
golang的浮点类型可以表示一个小数,比如123.4,7.8,0.13等。
案例演示
package main
import (
"fmt"
)
//golang中浮点类型的使用
func main() {
var price float32 = 3155.67
fmt.Println("薪水为:", price)
}
浮点类型分类
类型 | 占用存储空间 | 表数范围 |
---|---|---|
双精度float64 | 8字节 | -1.79E+308 ~ +1.79E+308 |
单精度float32 | 4字节 | -3.40E+38 ~ +3.40E+38 |
- 浮点数都是有符号的
- 尾数部分可能丢失,造成精度损失
package main
import (
"fmt"
)
//golang中浮点类型的使用
func main() {
//尾数可能会丢失,出现精度损失
var num1 float32 = -123.0000901
var num2 float64 = -123.0000901
fmt.Println("num1:", num1) //num1: -123.00009
fmt.Println("num2:", num2) //num2: -123.0000901
}
float64的精度比float32更准确
如果要保存精度高的数,应该选用float64
浮点类型使用细节
- golang浮点类型有固定的范围和字段长度,不受具体OS的影响。
- golang的浮点类型默认声明为float64类型
- 浮点类型常量有两种表示形式
十进制形式:如5.12 .512(必须有小数点)
科学计数法形式:如:5.12345e2 - 通常情况下,应该使用float64,因为它更精确。
字符类型
基本介绍
golang中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存。
字符串是一串固定长度的字符连接起来的字符序列。go的字符串是由单个字节连接起来的。也就是说传统的字符串由字符组成,而go的字符串不同,它是由字节组成的。
案例演示
package main
import (
"fmt"
)
//golang中字符类型的使用
func main() {
var c1 byte = 'a'
var c2 byte = '0'
//当直接输出byte值时,就是输出了对应的字符的码值
fmt.Println("c1:", c1, "c2:", c2) //c1: 97 c2: 48
//如果要输出对应字符,需要使用格式化输出
fmt.Printf("c1=%c c2=%c\n", c1, c2) //c1=a c2=0
//var c3 byte = '男' //overflow溢出
var c3 int = '男'
fmt.Printf("c3=%c c3对应的码值:%d", c3, c3) //c3=男 c3对应的码值:30007
}
- 如果保存的字符在ASCII表中,可以直接保存到byte
- 如果字符对应的码值大于255,这时我们可以考虑使用int类型保存
- 如果需要按照字符的方式输出,我们需要格式化输出,即fmt.Printf(’%c’, )
字符类型的使用细节
- go语言字符使用UTF-8编码,英文字母占1个字节,汉字占3个字节。
- 在go中,字符的本质是一个整数,直接输出时,是该字符对应的UTF-8编码的码值。
- 可以直接给某个变量赋一个数字,然后按照格式化输出时%c 会输出该数字对应的unicode字符。
- 字符类型可以进行运算,相当于一个整数,都有对应的Unicode码。
4和5案例:
package main
import (
"fmt"
)
//golang中字符类型的使用
func main() {
var c4 int = 22269 //22269 -> 国
fmt.Printf("c4:%c", c4) //c4:国
//字符类型是可以进行运算的,相当于一个整数,运算时按照码值进行
var c5 byte = 10 + 'a' //10+97->107
fmt.Println("c5:", c5) //5: 107
}
字符类型本质探讨
- 字符型存储到计算机中,需要将字符对应的码值(整数)找出来
存储:字符-》对应码值-〉二进制-》存储
读取:二进制-〉码值-》字符-〉读取 - 字符值和码值的对应关系都是通过字符编码决定的(规定好了)。
- go语言的编码都统一成utf-8,非常的方便,很同意,没有编码乱码的困扰。
布尔类型:bool
- 布尔类型也叫bool类型,bool类型数据只允许取值true和false
- bool类型占1个字节
- bool类型适用于逻辑运算,一般用于程序流程控制。
- if条件控制语句
- for循环控制语句
案例演示:
package main
import (
"fmt"
"unsafe"
)
//golang中布尔类型的使用
func main() {
var j bool = true
fmt.Println("b:", j) //b: true
//bool类型占用的存储空间为1个字节
fmt.Printf("j占用的空间为:%d", unsafe.Sizeof(j)) //j占用的空间为:1
//2.bool类型只能取true或者false
}
字符串类型:string
基本介绍
字符串就是一串固定长度的字符连接起来的字符序列。go的字符串是由单个字节连接起来的。go语言的字符串的字节使用utf-8编码标识Unicode文本。
基本使用:
//golang中字符串类型的使用
func main() {
var address string = "北京长城 110 hahah"
fmt.Println(address) //北京长城 110 hahah
}
string注意事项和使用细节
- 字符串一旦被赋值,字符串就不能修改了:在go中字符串是不可变的(字符串无法通过下标访问变量的值)
- 字符串的两种表示形式
(1)双引号,会识别转义字符
(2)反引号,以字符串的原生的形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果。
案例:
package main
import (
"fmt"
)
//golang中字符串类型的使用
func main() {
str2 := "abc\" hahah"
fmt.Println(str2) //abc" hahah
//使用反引号``
str3 := `func main() {
var price float32 = 3155.67
fmt.Println("薪水为:", price)
}
`
fmt.Println(str3)
}
- 字符串拼接方式 +号,注意当拼接代码很长时,可以分行写,但是+ 要留在上一行末尾。
案例:
//golang中字符串类型的使用
func main() {
str5 := "hello" + "world"
fmt.Println(str5) //helloworld
str6 := str5 +
"fight"
fmt.Println(str6) //helloworldfight
str7 := str6
+ "come" //报错
}
基本数据类型默认值
基本介绍
在go中,数据类型都有一个默认值,当没有赋值时,就会保留默认值,在go中,默认值又叫零值。
数据类型 | 默认值 |
---|---|
整型 | 0 |
浮点型 | 0 |
字符型 | “” 空串 |
布尔值 | false |