banner
音小董

哩哔哩哔

这世上的热闹出自孤单

第2章:基本数据类型

基本数据类型【数值型、字符型、布尔型、字符串】#

数值型【整数类型、浮点类型】#

整数类型【有符号整数类型、无符号整数类型、其他整数类型】#

== 存放整数值的类型,默认值为 0==

【1】有符号整数类型:

类型有无符号占用储存空间表数范围
int81 字节-27~27-1(-128~127)
int162 字节-215~215-1(-32768~32767)
int324 字节-231~231-1(-2147483648~2147483647)
int648 字节-263~263-1

【2】无符号整数类型:

类型有无符号占用储存空间表数范围
uint81 字节0~255
uint162 字节0~216-1
uint324 字节0~231-1
uint648 字节0~263-1

【3】其他整数类型:

类型有无符号占用储存空间表数范围
int32 位系统占 4 字节

64 位系统占 8 字节
-231~231-1

-263~263-1
uint32 位系统占 4 字节

64 位系统占 8 字节
0~232-1

0~264-1
rune等价 int32-231~231-1
byte等价 uint80~255

浮点类型#

== 存放小数值的类型,默认值为 0==

类型占用储存空间表数范围
float324 字节-3.403E38~3.403E38
float648 字节-1.798E308~1.798E308

golang默认的浮点类型是float64

字符型#

Golang中没有专门的字符类型,若要存储单个字符,一般使用byte来保存

ASCII 表:

ASCII 表.png

汉字字符底层对应的是Unicode码值,byte类型会溢出,所以可以用int

UTF-8 编码表 :

点击此处查表

== 总结:Golang 的字符对应使用的是 UTF-8 编码(Unicode 是对应的字符集,UTF-8 是其中的一种编码方案)==

转义字符:

转义字符表.png

布尔型

== 只允许取值 true 和 false 的类型,默认值为 false==

布尔类型又叫 bool 类型,占 1 个字节,适用于逻辑运算,一般用于程序流程控制

字符串#

== 一串固定长度的字符连接起来的字符序列,默认值为 ""==

1、如果字符串没有特殊字符,用双引号""表示;如果字符串没有特殊字符,用反引号``表示

package main

import "fmt"

func main() {
	var str1 string = "abc"
	fmt.Println(str1)
	var str2 string = `a\b\c`
	fmt.Println(str2)
}

2、字符串的拼接以及注意事项:

package main

import "fmt"

func main() {
	var str1 string = "abc" + "def"
	str1 += "xyz"
	fmt.Println(str1)
	//字符串拼接过长想换行,每行一定要以加号结尾
	var str2 string = "abc" + "abc" + "abc" +
		"abc" + "abc" + "abc" +
		"abc" + "abc" + "abc" +
		"abc" + "abc" + "abc" +
		"abc" + "abc" + "abc"
	fmt.Println(str2)
}

基本数据类型之间的转换#

Go语言不同类型的变量之间赋值需要显式转换,并且只有显式转换(强制转换)

package main

import "fmt"

func main() {
	var n1 int = 100
	//var n2 float32 = n1   这样无法转换,必须显式转换
	var n2 float32 = float32(n1)
	fmt.Println(n1)
	fmt.Println(n2)
	//int64转换成int8时,编译不会出错,但是数据会溢出,类似于把很大的物件往很小的容器里装
	var n3 int64 = 888888
	var n4 int8 = int8(n3)
	fmt.Println(n4) //输出56
}

基本数据类型与 string 的转换#

== 开发过程中,我们经常需要将基本数据类型转换为 string , 或者将 string 转换为基本数据类型 ==

方式一#

fmt.Sprintf("%参数",表达式),需要参数和表达式的类型匹配

package main

import "fmt"

func main() {
	var n1 int = 15
	var n2 float32 = 5.5
	var n3 bool = true
	var n4 byte = 'A'
	var m1 string = fmt.Sprintf("%d", n1)
	fmt.Printf("m1的数据类型是:%T, %q", m1, m1)
	fmt.Println()
	var m2 string = fmt.Sprintf("%f", n2)
	fmt.Printf("m2的数据类型是:%T,%q", m2, m2)
	fmt.Println()
	var m3 string = fmt.Sprintf("%t", n3)
	fmt.Printf("m3的数据类型是:%T,%q", m3, m3)
	fmt.Println()
	var m4 string = fmt.Sprintf("%c", n4)
	fmt.Printf("m4的数据类型是:%T,%q", m4, m4)
}

运行结果

m1的数据类型是:string, "15"
m2的数据类型是:string,"5.500000"
m3的数据类型是:string,"true"    
m4的数据类型是:string,"A" 

方式二#

使用strconv包的函数

package main

import (
	"fmt"
	"strconv"
)

func main() {
	var n1 int = 15
	//第一个参数必须转int64,第二个参数指定是多少进制
	var m1 string = strconv.FormatInt(int64(n1), 10)
	fmt.Printf("m1的数据类型是:%T, %q", m1, m1)
	fmt.Println()
	var n2 float64 = 5.5
	//第二个参数'f'(-ddd.dddd),第三个参数保留小数点后几位,第四个参数指定浮点类型
	var m2 string = strconv.FormatFloat(n2, 'f', 9, 64)
	fmt.Printf("m2的数据类型是:%T,%q", m2, m2)
	fmt.Println()
	var n3 bool = true
	var m3 string = strconv.FormatBool(n3)
	fmt.Printf("m3的数据类型是:%T,%q", m3, m3)
	fmt.Println()
}

运行结果

m1的数据类型是:string, "15"
m2的数据类型是:string,"5.500000000"
m3的数据类型是:string,"true"  

== 总结:重点使用方式一 ==

string 类型转换为基本类型#

使用 strconv 包的函数

package main

import (
	"fmt"
	"strconv"
)

func main() {
	//string---->bool
	var n1 string = "true"
	var m1 bool
	//ParseBool函数返回值有两个(value bool, err error)
	//value是得到的布尔类型的数据,err是出现的错误,err可以用_直接忽略
	m1, _ = strconv.ParseBool(n1)
	fmt.Printf("m1的数据类型是:%T, %v", m1, m1)
	fmt.Println()
	//string---->int64
	var n2 string = "55"
	var m2 int64
	//第二个参数指定几进制,第三个参数指定结果必须能无溢出赋值的整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64
	m2, _ = strconv.ParseInt(n2, 10, 64)
	fmt.Printf("m2的数据类型是:%T, %v", m2, m2)
	fmt.Println()
	//string---->float
	var n3 string = "8.8"
	var m3 float64
	//第二个参数指定了期望的接收类型,32是float32(返回值可以不改变精确值的赋值给float32),64是float64
	m3, _ = strconv.ParseFloat(n3, 64)
	fmt.Printf("m3的数据类型是:%T, %v", m3, m3)
	fmt.Println()
	//注意:一定要确保 st ring 类型够能够转换成有效的数据,比如我们可将 "123" 转换成一个整数,但是不能将 一个 “Hello” 转换为整数,否则会变成转换后的类型的默认值
	var n4 string = "golang"
	var m4 bool
	m4, _ = strconv.ParseBool(n4)
	fmt.Printf("m4的数据类型是:%T, %v", m4, m4)
	fmt.Println()
	var n5 string = "golang"
	var m5 int64
	m5, _ = strconv.ParseInt(n5, 10, 64)
	fmt.Printf("m5的数据类型是:%T, %v", m5, m5)
}

运行结果

m1的数据类型是:bool, true
m2的数据类型是:int64, 55   
m3的数据类型是:float64, 8.8
m4的数据类型是:bool, false 
m5的数据类型是:int64, 0 
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。