不灭的焱

革命尚未成功,同志仍须努力 JDK下载

作者:AlbertWen  添加时间:2025-11-15 21:49:20  修改时间:2026-10-21 12:23:20  分类:21.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)

序号 类型 说明
1 array 【数组】固定长度的数组 [n]T
2 slice 【切片】动态长度序列(切片,最常用) []T
3 map 【映射】哈希表(字典) map[KeyType]ValueType
4 struct 【结构体】组合不同类型字段
5 pointer 【指针】*T
6 function 【函数】也是一种类型 func(params) returnType
7 interface 【接口】类型
8 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 布尔值
  int, int8, int16, int32, int64 有符号整数
  uint, uint8, uint16, uint32, uint64, uintptr 无符号整数
  float32, float64 浮点数
  complex64, complex128 复数
  string 字符串
  byte (=uint8), rune (=int32) 别名类型
复合类型 [n]T 数组
  []T 切片
  struct 结构体
  map[K]V 映射
引用类型 *T 指针
  slice, map, channel, function (底层包含指针)
接口类型 interface 接口