不灭的火

加密类型:SHA/AES/RSA下载Go
复合类型:数组(array)、切片(slice)、映射(map)、结构体(struct)、指针(pointer、函数(function)、接口(interface)、通道(channel) Go类型大全

作者:AlbertWen  添加时间:2025-11-15 21:49:20  修改时间:2025-11-15 23:26:05  分类:02.Go语言编程  编辑

Go 语言(Golang)的数据类型可以分为以下几大类:

1. 基本类型(Basic types)

类型 说明 示例
bool 布尔型 true / false
int, int8, int16, int32, int64 有符号整数 int 是平台相关(32位系统32位,64位系统64位)
uint, uint8, uint16, uint32, uint64, uintptr 无符号整数 byte 是 uint8 的别名;
rune 是 int32 的别名(表示一个 Unicode 码点)
float32, float64 浮点数  
complex64, complex128 复数(实部和虚部分别是 float32/float64)  
string 字符串(不可变、UTF-8 编码) "hello 世界"

2. 复合类型(Composite types)

类型 说明
array 固定长度的数组 [n]T
slice 动态长度序列(切片,最常用) []T
map 哈希表(字典) map[KeyType]ValueType
struct 结构体,组合不同类型字段
pointer 指针 *T
function 函数也是一种类型 func(params) returnType
interface 接口类型
channel 通道,用于 goroutine 通信 chan T、<-chan T、chan<- T

3. 具体常见别名总结

byte   // uint8 的别名
rune   // int32 的别名,表示一个 Unicode 码点
error  // 内置接口类型:interface { Error() string }

4. 类型零值(Zero Value)一览(很重要!)

类型 零值
bool false
所有数字类型 0
string ""(空字符串)
pointer nil
slice nil
map nil
channel nil
interface nil
function nil
struct/array 所有字段/元素都是各自类型的零值

5. 类型转换(必须显式)

Go 不允许隐式类型转换,必须用 T(v) 显式转换:

var i int = 42
var f float64 = float64(i)     // int → float64
var u uint = uint(f)

i := 42
f := float64(i)
s := string(i)    // 注意:这里会转成字符码,不是"42"!
s = strconv.Itoa(i) // 正确把 int 转成 "42"

总结一句话:Go 的类型系统是静态强类型,所有基本类型和复合类型都必须在编译期明确,不能隐式转换。

 

 


 

DeepSeek AI输出:Go有哪些数据类型?

Go 语言中的数据类型非常丰富,可以分为四大类:基本类型复合类型引用类型接口类型

下面我将为你详细列出并解释这些类型。

1. 基本类型

基本类型是构建更复杂数据结构的基石。

布尔类型

  • bool: 只有两个值,true 或 false

数值类型

整数类型

  • 有符号整数(可正可负):

    • int8 (-128 到 127)
    • int16 (-32768 到 32767)
    • int32 (-2147483648 到 2147483647)
    • int64 (非常大的正负整数)
    • int (最常用,在32位系统上是int32,在64位系统上是int64)
  • 无符号整数(只有正数和零):

    • uint8 (0 到 255,也叫 byte)
    • uint16 (0 到 65535)
    • uint32 (0 到 4294967295)
    • uint64 (非常大的正整数)
    • uint (在32位系统上是uint32,在64位系统上是uint64)
    • uintptr (用于存放一个指针,主要用于底层编程)
  • 其他

    • rune: 是 int32 的别名,代表一个 Unicode 码点。

浮点数类型

  • float32 (IEEE-754 32位浮点数)
  • float64 (IEEE-754 64位浮点数,精度更高,是最常用的)

复数类型

  • complex64 (实部和虚部都是 float32)
  • complex128 (实部和虚部都是 float64)

字符串类型

  • string: 一串不可变的字节序列,通常用于表示文本。使用双引号 " " 或反引号 ` ` 创建。

2. 复合类型 / 聚合类型

这些类型通过组合其他类型来创建更复杂的数据结构。

数组

  • 具有固定长度且元素类型相同的序列。
  • 例如:var a [5]int 声明了一个包含5个整数的数组。
  • 长度是类型的一部分,[5]int 和 [10]int 是不同的类型。

切片

  • 具有可变长度且元素类型相同的序列。这是 Go 中最常用、最灵活的序列类型。
  • 它是对底层数组的一个“视图”或“引用”。
  • 使用 make([]T, length, capacity) 创建,或通过 []T{} 字面量创建。
  • 例如:s := make([]int, 0, 5) 或 s := []int{1, 2, 3}

结构体

  • 一个可以包含不同数据类型的集合,用于将相关的数据聚合在一起。
  • 使用 struct 关键字定义。
  • 例如:
type Person struct {
    Name string
    Age  int
}

映射

  • 一种无序的键值对集合。在其他语言中也被称为字典或哈希表。
  • 使用 make(map[keyType]valueType) 创建。
  • 例如:m := make(map[string]int)

3. 引用类型

这些类型在声明时,变量本身存储的是一个“引用”(如指针、地址、句柄),而不是实际的数据。

  • 切片
  • 映射
  • 通道
  • 函数
  • 指针

注意:切片、映射和通道在底层实现上都是包含指针的结构体,所以它们属于引用类型。当你将它们传递给函数时,传递的是这个引用(的副本),而不是整个数据的副本,因此在函数内部修改会影响到原始数据。

指针

  • 存储了另一个变量的内存地址
  • 使用 *T 表示指向类型 T 的指针。
  • 使用 & 操作符获取变量的地址。
  • 例如:var p *int = &x

4. 接口类型

接口类型是一种抽象类型,它定义了一组方法签名(方法名、参数和返回值)的集合。

  • 任何其他类型,只要实现了接口中定义的所有方法,就被认为是实现了该接口。
  • 这是 Go 语言实现多态的核心。
  • 例如:
// 定义一个接口
type Writer interface {
    Write([]byte) (int, error)
}

// 任何拥有 `Write([]byte) (int, error)` 方法的类型都实现了 Writer 接口

总结表格

类别 类型 说明
基本类型 bool 布尔值
  intint8int16int32int64 有符号整数
  uintuint8uint16uint32uint64uintptr 无符号整数
  float32float64 浮点数
  complex64complex128 复数
  string 字符串
  byte (=uint8), rune (=int32) 别名类型
复合类型 [n]T 数组
  []T 切片
  struct 结构体
  map[K]V 映射
引用类型 *T 指针
  slicemapchannelfunction (底层包含指针)
接口类型 interface 接口