go语言支持哪些数据类型?

一、go语言支持哪些数据类型?

Go语言支持丰富的数据类型,主要分为基本数据类型、复合数据类型和特殊数据类型三类:

  1. 基本数据类型
    • 布尔型(bool):取值为 truefalse
    • 整数型:包括有符号整数(intint8int16int32int64)和无符号整数(uintuint8uint16uint32uint64),其中 intuint 的宽度取决于平台(32位或64位)。
    • 浮点型float32(32位)和 float64(64位),后者是默认浮点类型。
    • 复数型complex64(实部和虚部均为 float32)和 complex128(实部和虚部均为 float64)。
    • 字符串型(string):UTF-8编码的不可变文本,本质是字节序列。
    • 字节型byteuint8 的别名)和 runeint32 的别名,用于存储Unicode字符)。
  2. 复合数据类型
    • 数组(array)固定长度的相同类型元素序列,长度是类型的一部分(如 [5]int)。
    • 切片(slice)可变长度的数组封装,支持动态扩容(如 []int)。
    • 映射(map)键值对集合,键需为相同类型(如 map[string]int),键唯一值可不唯一
    • 结构体(struct):用户自定义的聚合类型,可包含不同类型字段(如 type Point struct { X, Y int })。
    • 指针(pointer):存储变量内存地址(如 *int)。
    • 函数(function):可作为类型传递(如 func(a int) int)。
    • 接口(interface):定义方法集合,实现多态(如 type Reader interface { Read() })。
    • 通道(channel):用于协程(goroutine)间通信(如 chan int)。
  3. 特殊数据类型
    • 空值(nil):表示无值,常用于指针、切片等。
    • 错误(error):内置接口类型,用于错误处理。

二、如何在Go中实现变量的类型转换?

在Go中,类型转换需显式操作,不支持隐式转换,主要方法包括:

  1. 显式类型转换(T(v))
    • 语法:目标类型(表达式),例如将 int 转为 float64f := float64(42)
    • 适用场景:数值类型间转换(如整型与浮点型),但需注意精度丢失(如 floatint 会截断小数)。
  2. 使用 strconv 包处理字符串转换
    • 字符串转基本类型:如 strconv.Atoi("123") 将字符串转为 int,返回值和错误信息。
    • 基本类型转字符串:如 strconv.Itoa(123)strconv.FormatFloat(3.14, 'f', 2, 64)
  3. 类型断言(针对接口类型)
    • 语法:value, ok := interfaceVar.(具体类型),例如从空接口 interface{} 提取字符串:s, ok := i.(string)
    • 失败时 okfalse,若忽略 ok 可能触发 panic
  4. 强制转换(需谨慎)
    • 使用 unsafe.Pointer 实现跨类型指针转换,如 newPtr := (*T2)(unsafe.Pointer(ptr)),但可能引发安全问题。

注意事项:

  • 不兼容类型(如 float[]byte)会编译失败。
  • 字符串与 []byte 可直接互转:b := []byte(s)s := string(b)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值