go基础语法中数组、切片、映射、结构体等的实战案例笔记

46 阅读6分钟

学习Go语言的数据结构是非常重要的,它们为我们处理和组织数据提供了强大的工具。在本篇文章中,我们将通过实战案例来学习Go语言中的数组、切片、映射和结构体。我们将详细讨论它们的特点、用途并给出相关的代码示例。

  1. 数组 数组是一种固定长度的数据结构,其中的元素具有相同的数据类型。Go语言中的数组是值类型,它们在内存中是连续存储的。下面是一个简单的例子,说明了如何声明和使用数组: package main

import "fmt"

func main() { // 声明一个包含5个整数的数组 var arr [5]int

// 为数组赋值
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5

// 打印数组的值
fmt.Println(arr) // 输出:[1 2 3 4 5]

}

在上面的代码中,我们声明了一个包含5个整数的数组 arr。然后,我们为数组的每个元素赋值,并最后打印整个数组。注意,我们使用方括号加索引的方式来访问数组的元素。 数组非常适用于存储固定大小的数据集合,但是其长度是不可变的。如果我们需要存储可变长度的数据集合,我们可以使用切片。 2. 切片 切片是Go语言中动态长度的,并且可以自动调整大小的数据结构。它是基于数组的抽象,提供了更灵活和方便的操作。下面是一个使用切片的示例: package main

import "fmt"

func main() { // 声明一个切片 nums := []int{1, 2, 3, 4, 5}

// 打印整个切片
fmt.Println(nums) // 输出:[1 2 3 4 5]

// 添加元素到切片
nums = append(nums, 6, 7)

// 切片切割
sliced := nums[2:5] // 包含索引2,但不包含索引5
fmt.Println(sliced) // 输出:[3 4 5]

}

在上述代码中,我们首先声明了一个切片 nums,并使用初始元素进行初始化。然后,我们使用 append 函数向切片中添加新的元素。最后,我们展示了如何对切片进行切割操作,并将其赋值给变量 sliced。 切片是非常常用的数据结构,尤其在需要动态管理长度的数据集合时。它可以根据需要扩展或缩小,并提供了丰富的内置函数来处理切片的操作。 3. 映射 映射(Map)是一种用于存储键值对的数据结构,在其他编程语言中也被称为字典或关联数组。在Go语言中,映射是引用类型,具有动态大小和高效的查找功能。下面是一个使用映射的例子: package main

import "fmt"

func main() { // 声明一个映射 student := map[string]int{ "Alice": 21, "Bob": 22, "Charlie": 20, }

// 通过键来访问映射的值
fmt.Println(student["Bob"]) // 输出:22

// 添加或修改映射的键值对
student["Eve"] = 19

// 删除映射的键值对
delete(student, "Charlie")

// 打印整个映射
fmt.Println(student) // 输出:map[Alice:21 Bob:22 Eve:19]

}

在上面的代码中,我们首先声明了一个映射 student,并使用键值对初始化它。然后,我们展示了如何通过键来访问映射的值、添加或修改映射的键值对,以及如何删除映射的键值对。 映射是非常有用的数据结构,特别适合用于存储和检索键值对数据。它在实际开发中经常用于缓存、配置管理和快速查找等场景。 4. 结构体 结构体是一种自定义的数据类型,它允许我们组合不同类型的字段来表示一个复杂的数据结构。通过结构体,我们可以模拟现实世界中的对象,并对其进行操作。下面是一个使用结构体的例子: package main

import "fmt"

type Person struct { Name string Age int Address string }

func main() { // 创建一个结构体实例 p := Person{ Name: "Alice", Age: 25, Address: "123 Main St", }

// 访问结构体字段
fmt.Println(p.Name)    // 输出:Alice
fmt.Println(p.Age)     // 输出:25
fmt.Println(p.Address) // 输出:123 Main St

}

在上述代码中,我们首先定义了一个 Person 结构体类型,并根据其定义创建了一个结构体实例 p。然后,我们通过点操作符来访问结构体的字段。 结构体是非常有用的数据结构,它可以组织和保存相关数据,并提供了面向对象的特性,比如封装和方法。在实践中,我们经常使用结构体来构建复杂的数据模型和对象。 通过以上实战案例,我们对Go语言中的数组、切片、映射和结构体有了更深入的理解。这些数据结构在实际开发中非常重要,它们为我们提供了有效处理和组织数据的工具。通过不断实践和探索,你将逐渐熟练运用这些数据结构,并能够在实际项目中灵活应用它们。祝你在Go语言的学习和实践中取得成功!

** 小游戏实战**

在以上案例的基础上开发一个猜数字的小游戏。游戏规则是程序随机生成一个数字,然后玩家根据提示逐步猜测该数字,直到猜中为止。 package main

import ( "fmt" "math/rand" "time" )

func main() { // 生成随机种子 rand.Seed(time.Now().UnixNano())

// 生成一个1到100之间的随机整数
target := rand.Intn(100) + 1

fmt.Println("欢迎来到猜数字游戏!")
fmt.Println("我已经想好了一个1到100之间的数字,请开始猜测。")

for {
    fmt.Print("请输入你的猜测:")
    var guess int
    _, err := fmt.Scanf("%d", &guess)
    if err != nil {
        fmt.Println("输入无效,请输入一个有效的整数。")
        continue
    }

    if guess < target {
        fmt.Println("猜小了,请再试一次。")
    } else if guess > target {
        fmt.Println("猜大了,请再试一次。")
    } else {
        fmt.Println("恭喜你,猜对了!")
        break
    }
}

}

在上述代码中,我们首先使用 rand.Seed 函数设置随机数种子,以确保每次运行程序时生成的随机数都不同。然后,我们使用 rand.Intn 函数生成一个1到100之间的随机整数作为目标数字。 接下来,我们通过循环来接受玩家的猜测。玩家需要通过标准输入输入一个整数作为猜测值。然后,我们根据玩家的猜测与目标数字的大小关系给出相应的提示,直到玩家猜中目标数字为止。 该小游戏结合了数组、切片、映射和结构体的基本知识,并通过随机数生成和用户输入等操作进行交互。希望这个简单的猜数字游戏能够帮助你更好地理解和运用Go语言中的数据结构。玩得开心!