Golang学习之数据类型
数据类型
Go语言中的数据类型分为基本数据类型和复合数据类型
- 基本数据类型:整型、浮点型、布尔型、字符串
- 复合数据类型:数组array、切片slice、结构体、函数、map、通道channel、接口等
整型
类型 | 范围 | 占用空间 | 有无符号 |
---|---|---|---|
int8 | -2^7 到 2^7-1 | 1个字节 | 有 |
int16 | -2^15 到 2^15-1 | 2个字节 | 有 |
int32 | -2^31 到 2^31-1 | 4个字节 | 有 |
int64 | -2^63 到 2^63-1 | 8个字节 | 有 |
uint8 | 0 到 2^8-1 | 1个字节 | 无 |
uint16 | 0 到 2^16-1 | 2个字节 | 无 |
uint32 | 0 到 2^32-1 | 4个字节 | 无 |
uint64 | 0 到 2^64-1 | 8个字节 | 无 |
如果直接写int
,在不同的操作系统中,其大小是不一样的
- 32位操作系统:
int
-->int32
- 64位操作系统:
int
-->int64
可以通过unsafe.Sizeof()
查看不同长度的整型
var numb = 12
fmt.Println(unsafe.Sizeof(numb))
类型转换
强制类型转换
var a1 int16=10
var a2 int32=12
var a3 = int32(a1)+a2
需要注意的是,高位转换为低位,会存在精度丢失的问题
进制转换
0d111,十进制的111,D,%d
0o111,八进制的111,O,%o
0b111,二进制的111,B,%b
0x111,十六进制的111,X,%x
浮点型
Go语言支持两种浮点型
- float32,最大范围为3.4e38
- float64,最大范围为1.8e308
打印时,%f,默认打印小数点6位
%.2f,指打印小数点后2位
布尔型
bool,真或假,True
or False
字符串类型
字符串的值为双引号("")之间的内容
可使用反引号,定义多行字符
var str = `第一行
第二行`
fmt.Println(str)
字符串常见操作
len(s):求长度
+/fmt.Sprintf:拼接字符串
strings.Split:分割
strings.contains:判断是否包含
strings.HasPrefix/strings.HasSuffix:前缀/后缀判断
strings.Index(),strings.LastIndex():判断字符在字符串出现的位置
strings.Join():join操作
byte和rune类型
字符,即组成字符串的元素,通过遍历字符串元素可以获得字符,字符用''表示。
Go语言中字符有两种形式:
- uint8类型:也就是byte类型,代表ACII码的一个字符(1个字节)
- rune类型:代表了一个UTF-8字符(1-4个字节)
当需要处理中文、日语等其他复合字符时,需要使用rune类型,实际上它是一个int32类型,另外,在Go语言中,一个汉字占3个字节,一个字母占一个字节。
修改字符串
要修改字符串,需要先将其转换成[]rune()
或[]byte()
类型,完成后再转换成string,无论哪种转换都会重新分配内存,并复制字节数组
- 转换为
[]byte
类型
//字符串转换
s1 := "big"
bytes1 := []byte(s1) //[98 105 103]
bytes1[0]='p' // b -> p
fmt.Println(string(bytes1)) //pig
- 转换为
rune
类型
s2 := "你好golang"
bytes2 := []rune(s2) //[20320 22909 103 111 108 97 110 103]
bytes2[0] = '我' // '你'->'我'
fmt.Println(string(bytes2)) //我好golang
基本数据类型转换
数值类型转换
float32()
int16()
转换成字符串类型
- 通过
fmt.Sprintf()
转换成字符串string类型
var i int = 20
str1 := fmt.Sprintf("%d", i) // '20' string
- 通过
strconv
包里面的集中转换方法进行转换
//int -> string
var n int64 = 20
1 := strconv.FormatInt(n,10) // "20",,string
字符串转换成int和float类型
str := "10"
num,_ = strconv.ParseInt(str,10,64)
//strconv.ParseInt(a,b,c),第一个参数:需要转换的字符;第二个参数:进制;第三个参数:32位或64位(可省略)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具