下面将对这些类型进行详细说明:

一、基本数据类型

  1. 布尔型 (bool):表示逻辑值,仅有两个可选值 truefalse

    var isTrue bool = true
    var isFalse bool = false
    
  2. 整数型

    • 有符号整数:int8、int16、int32(通常对应C中的short)、int64(通常对应C中的long long)。
    • 无符号整数:uint8(等同于byte)、uint16、uint32、uint64。
    var i int8 = -128 // 最小值为-128,最大值为127
    var u uint32 = 4294967295 // 最大值为 2^32 - 1
    
  3. 浮点型

    • float32:32位IEEE-754浮点数。
    • float64:64位IEEE-754浮点数,这是Go中默认的浮点数类型。
    var f float32 = 3.14159265 // 浮点数
    var pi float64 = math.Pi // 使用math库中的π常数
    
  4. 复数型

    • complex64:由两个32位浮点数(实部和虚部)组成。
    • complex128:由两个64位浮点数组成。
    var c complex64 = 3 + 4i // 复数
    
  5. 字符串 (string):不可变的字符序列,使用UTF-8编码。

    var s string = "Hello, World!" // 字符串
    

二、复合数据类型

  1. 数组 (array):固定长度的同类型元素集合,其长度在声明时必须确定。

    var a [5]int // 声明一个包含5个整数的数组
    
  2. 切片 (slice):动态大小的、灵活的数组视图,它不拥有底层数据,而是指向底层数组的一个片段。

    var s []int = make([]int, 0, 5) // 创建一个初始长度为0,容量为5的整数切片
    
  3. 结构体 (struct):用户自定义的数据类型,可以包含多个成员,每个成员可以是不同类型的变量。

    type Person struct {
        Name string
        Age  int
    }
    var p Person
    p.Name = "Alice"
    p.Age = 30
    
  4. 接口 (interface):定义了一组方法签名,任何实现了这些方法的类型都实现了该接口。

    type Writer interface {
        Write(p []byte) (n int, err error)
    }
    
    type MyWriter struct {}
    func (w MyWriter) Write(p []byte) (n int, err error) { ... }
    

三、引用类型

  1. 指针 (pointer):存储变量内存地址的类型,允许直接操作内存中的值。

    var x int = 10
    var p *int = &x // 指针p指向变量x的地址
    *p = 20        // 通过指针修改x的值
    
  2. 函数类型 (function type):可以像其他任何类型一样声明和赋值,允许作为参数传递或从函数返回。

    func add(a, b int) int {
        return a + b
    }
    
    var myFunc func(int, int) int = add
    
  3. 通道 (channel):用于并发编程的通信机制,用于goroutine之间的同步和数据传输。

    ch := make(chan int) // 创建一个int类型的通道
    go func() {
        ch <- 42 // 向通道发送一个值
    }()
    value := <-ch // 从通道接收一个值
    
  4. 映射 (map):关联键值对的数据结构,键和值可以是任意类型。

    m := make(map[string]int)
    m["apple"] = 10
    
  5. 错误类型 (error):虽然不是内置类型,但error是一种广泛使用的接口类型,用于表示运行时错误。

四、特殊类型

  1. 空接口 (interface{}):不包含任何方法的接口,它可以容纳任何类型的值。

以上是对Go语言主要数据类型的详解。通过这些类型,开发者可以在Go程序中构建复杂的抽象,并实现高效的内存管理和类型安全。

小结

数据类型需要通过实际应用来深入掌握。在后续内容中将逐步展开。

02-23 00:36