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位(可省略)
posted @   Kuofluo  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示