Karp 的技术博客

2024-10-03T10:01:57.png

2024-10-03T10:05:37.png

Go 语言基础数据类型及复合类型学习

Go 语言是一种强类型语言,提供了多种基本数据类型和复合数据类型。这些数据类型构成了 Go 编程的基础,理解它们对于编写高效、可读的代码至关重要。本文将介绍 Go 语言的基本数据类型及复合类型,并提供示例代码。

1. 基础数据类型

1.1 布尔类型

布尔类型用于表示真(true)或假(false)的值。

示例

package main

import "fmt"

func main() {
    var isActive bool = true
    fmt.Println("Is Active:", isActive) // 输出: Is Active: true
}

1.2 整型

Go 语言提供了多种整型,包括:

  • int8:8 位带符号整型
  • byte:8 位无符号整型(uint8的别名)
  • int16:16 位带符号整型
  • int:平台相关的整型,通常为 32 位或 64 位
  • uint:无符号整型,通常为 32 位或 64 位
  • uintptr:无符号整型,用于存储指针

示例

package main

import "fmt"

func main() {
    var a int8 = 127
    var b byte = 255
    var c int16 = -32768
    var d int = 42
    var e uint = 50
    var f uintptr = 0x1234

    fmt.Println("a:", a) // 输出: a: 127
    fmt.Println("b:", b) // 输出: b: 255
    fmt.Println("c:", c) // 输出: c: -32768
    fmt.Println("d:", d) // 输出: d: 42
    fmt.Println("e:", e) // 输出: e: 50
    fmt.Println("f:", f) // 输出: f: 4660
}

1.3 浮点类型

浮点类型用于表示带小数的数值,Go 提供了两种浮点型:

  • float32:单精度浮点数
  • float64:双精度浮点数,默认使用此类型

示例

package main

import "fmt"

func main() {
    var pi float64 = 3.14159
    var e float32 = 2.71828

    fmt.Println("Pi:", pi) // 输出: Pi: 3.14159
    fmt.Println("E:", e)   // 输出: E: 2.71828
}

1.4 复数类型

复数类型由实部和虚部组成,Go 支持两种复数类型:

  • complex64(对应于 float32
  • complex128(对应于 float64

示例

package main

import "fmt"

func main() {
    var c1 complex64 = 1 + 2i
    var c2 complex128 = 3 + 4i

    fmt.Println("c1:", c1) // 输出: c1: (1+2i)
    fmt.Println("c2:", c2) // 输出: c2: (3+4i)
}

1.5 字符串类型

字符串是字符的序列,Go 的字符串是不可变的。可以使用双引号或反引号(用于多行字符串)来定义字符串。

示例

package main

import "fmt"

func main() {
    var greeting string = "Hello, Go!"
    var multiline string = `This is a
multiline string.`

    fmt.Println(greeting)      // 输出: Hello, Go!
    fmt.Println(multiline)     // 输出: This is a\nmultiline string.
}

1.6 字符类型

字符类型在 Go 中使用 rune 表示,runeint32 的别名,通常用于表示 Unicode 字符。

示例

package main

import "fmt"

func main() {
    var r rune = 'A'
    fmt.Println("Rune value:", r) // 输出: Rune value: 65 (Unicode for 'A')
}

1.7 错误类型

Go 的错误处理采用了内置的 error 类型,通常用于表示函数执行中的错误。

示例

package main

import (
    "errors"
    "fmt"
)

func doSomething() error {
    return errors.New("an error occurred")
}

func main() {
    if err := doSomething(); err != nil {
        fmt.Println("Error:", err) // 输出: Error: an error occurred
    }
}

2. 复合数据类型

Go 语言还支持多种复合类型,包括指针、数组、切片、字典、通道、结构体和接口。

2.1 指针

指针用于存储变量的地址,可以通过 & 获取变量的地址,通过 * 访问指针指向的值。

示例

package main

import "fmt"

func main() {
    x := 42
    ptr := &x // 获取 x 的地址

    fmt.Println("Value of x:", *ptr) // 输出: Value of x: 42
    *ptr = 100                           // 修改 x 的值
    fmt.Println("Updated value of x:", x) // 输出: Updated value of x: 100
}

2.2 数组

数组是固定大小的元素集合,声明时需要指定长度。

示例

package main

import "fmt"

func main() {
    var arr [3]int // 声明一个长度为 3 的整型数组
    arr[0] = 1
    arr[1] = 2
    arr[2] = 3

    fmt.Println("Array:", arr) // 输出: Array: [1 2 3]
}

2.3 切片

切片是对数组的一个抽象,提供了动态大小的数组功能。

示例

package main

import "fmt"

func main() {
    numbers := []int{1, 2, 3}
    fmt.Println("Slice:", numbers) // 输出: Slice: [1 2 3]

    // 添加元素
    numbers = append(numbers, 4)
    fmt.Println("Updated Slice:", numbers) // 输出: Updated Slice: [1 2 3 4]
}

2.4 字典

字典(map)是一种键值对集合,支持快速查找。

示例

package main

import "fmt"

func main() {
    dict := map[string]int{"one": 1, "two": 2, "three": 3}
    fmt.Println("Dictionary:", dict) // 输出: Dictionary: map[one:1 three:3 two:2]

    // 添加元素
    dict["four"] = 4
    fmt.Println("Updated Dictionary:", dict) // 输出: Updated Dictionary: map[four:4 one:1 three:3 two:2]
}

2.5 通道(Channel)

通道用于在 goroutine 之间进行通信。

示例

package main

import (
    "fmt"
    "time"
)

func main() {
    ch := make(chan string)

    go func() {
        time.Sleep(1 * time.Second)
        ch <- "Hello from goroutine!"
    }()

    fmt.Println(<-ch) // 输出: Hello from goroutine!
}

2.6 结构体

结构体用于将不同类型的数据组合在一起。

示例

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    p := Person{Name: "Alice", Age: 30}
    fmt.Println("Person:", p) // 输出: Person: {Alice 30}
}

2.7 接口

接口定义了一组方法的集合,可以通过接口实现多态。

示例

package main

import "fmt"

type Greeter interface {
    Greet() string
}

type English struct{}

func (e English) Greet() string {
    return "Hello!"
}

type Spanish struct{}

func (s Spanish) Greet() string {
    return "¡Hola!"
}

func main() {
    var g Greeter

    g = English{}
    fmt.Println(g.Greet()) // 输出: Hello!

    g = Spanish{}
    fmt.Println(g.Greet()) // 输出: ¡Hola!
}

3. 总结

在 Go 语言中,理解基础数据类型和复合类型是编写高效代码的基础。本文介绍了布尔类型、整型、浮点型、复数类型、字符串类型、字符类型、错误类型,以及指针、数组、切片、字典、通道、结构体和接口等复合类型。

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2024年10月03日 13:57
10

目录

来自 《「连载二」Go 语言基础类型》