Go语言中的数据类型分类

220 阅读2分钟

1. 基本数据类型(Primitive Data Types)

1.1 整数类型

  • int:平台相关,32位或64位。
  • int8int16int32int64:固定位数的有符号整数。
  • uint:平台相关的无符号整数。
  • uint8uint16uint32uint64:固定位数的无符号整数。
  • byteuint8的别名,用于表示字节。
  • runeint32的别名,用于表示Unicode码点。
var a int = 42
var b int8 = 127
var c uint = 255
var d byte = 'A' // 等同于 uint8
var e rune = '你' // 等同于 int32

1.2 浮点数类型

  • float32:32位浮点数。
  • float64:64位浮点数。
var f1 float32 = 3.14
var f2 float64 = 3.141592653589793

1.3 复数类型

  • complex64:由两个float32组成的复数。
  • complex128:由两个float64组成的复数。
var c1 complex64 = 1 + 2i
var c2 complex128 = 3 + 4i

1.4 布尔类型

  • bool:取值为truefalse
var isTrue bool = true
var isFalse bool = false

1.5 字符串类型

  • string:不可变的字节序列。
var s string = "Hello, Go!"

2. 复合数据类型(Composite Data Types)

2.1 数组(Array)

  • 固定长度的序列,元素类型相同。
var arr [3]int = [3]int{1, 2, 3}

2.2 切片(Slice)

  • 动态长度的序列,基于数组封装。
var s []int = []int{1, 2, 3}
s = append(s, 4) // 动态添加元素

2.3 映射(Map)

  • 键值对集合,键和值可以是任意类型。
var m map[string]int = map[string]int{"age": 25, "height": 180}

2.4 结构体(Struct)

  • 由一组字段组成的复合类型。
type Person struct {
    Name string
    Age  int
}
var p Person = Person{Name: "Alice", Age: 30}

2.5 指针(Pointer)

  • 存储变量的内存地址。
var x int = 10
var p *int = &x // p指向x的地址

3. 接口类型(Interface Type)

3.1 接口(Interface)

  • 定义一组方法签名,由具体类型实现。
type Speaker interface {
    Speak() string
}

type Dog struct{}
func (d Dog) Speak() string {
    return "Woof!"
}

var s Speaker = Dog{}
fmt.Println(s.Speak()) // 输出: Woof!

4. 函数类型(Function Type)

4.1 函数(Function)

  • 函数可以作为变量或参数传递。
type MyFunc func(int) int

var f MyFunc = func(x int) int {
    return x * x
}
fmt.Println(f(5)) // 输出: 25

5. 通道类型(Channel Type)

5.1 通道(Channel)

  • 用于goroutine之间的通信。
ch := make(chan int)
go func() {
    ch <- 42 // 发送数据
}()
value := <-ch // 接收数据
fmt.Println(value) // 输出: 42

6. 自定义类型(Custom Type)

6.1 类型别名(Type Alias)

  • 为现有类型创建别名。
type MyInt int
var x MyInt = 10

6.2 结构体类型(Struct Type)

  • 自定义结构体类型。
type Point struct {
    X, Y int
}
var p Point = Point{X: 1, Y: 2}