Jupyter AI

33 简易项目实战之编写Go代码

📅 发表日期: 2024年8月11日

分类: 🐹Go 语言入门

👁️阅读: --

在上一篇中,我们进行了项目需求分析,确定了简易项目的基本功能和结构。本篇将着重于如何在Go语言中编写符合这些需求的代码,构建完整的代码解决方案。我们的项目是一个简单的命令行待办事项(To-Do)管理工具。我们将逐步编写代码,确保每一部分都是清晰且易于理解的。

项目结构

在开始编写代码之前,让我们首先确定项目的基本结构。我们将创建以下目录和文件:

todo/
├── main.go
└── todo.go
  • main.go:程序的入口文件,将处理用户交互。
  • todo.go:包含待办事项的管理逻辑。

编写代码

1. 创建 todo.go

首先,我们在 todo.go 文件中定义待办事项的结构以及相关的方法。我们要实现一个简单的待办事项管理,包括添加、列出和删除待办事项。

// todo.go
package main

import (
    "fmt"
)

type Todo struct {
    ID   int
    Task string
}

var todos []Todo // 用于存储待办事项
var nextID int   // 用于跟踪下一个待办事项的ID

// AddTodo 添加一个新的待办事项
func AddTodo(task string) {
    nextID++
    todo := Todo{ID: nextID, Task: task}
    todos = append(todos, todo)
    fmt.Println("添加待办事项:", task)
}

// ListTodos 列出所有待办事项
func ListTodos() {
    fmt.Println("当前待办事项:")
    for _, todo := range todos {
        fmt.Printf("%d: %s\n", todo.ID, todo.Task)
    }
}

// RemoveTodo 删除待办事项
func RemoveTodo(id int) {
    for i, todo := range todos {
        if todo.ID == id {
            todos = append(todos[:i], todos[i+1:]...) // 删除指定ID的待办事项
            fmt.Println("已删除待办事项:", id)
            return
        }
    }
    fmt.Println("待办事项未找到:", id)
}

2. 创建 main.go

接下来,我们在 main.go 中实现用户交互逻辑。用户可以通过命令行输入来添加、列出和删除待办事项。

// main.go
package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

func main() {
    scanner := bufio.NewScanner(os.Stdin)

    for {
        fmt.Print("请输入命令(add / list / remove / exit):")
        scanner.Scan()
        command := scanner.Text()

        switch {
        case strings.HasPrefix(command, "add "):
            task := strings.TrimPrefix(command, "add ")
            AddTodo(task)
        case command == "list":
            ListTodos()
        case strings.HasPrefix(command, "remove "):
            idStr := strings.TrimPrefix(command, "remove ")
            id, err := strconv.Atoi(idStr)
            if err == nil {
                RemoveTodo(id)
            } else {
                fmt.Println("无效的ID:", idStr)
            }
        case command == "exit":
            fmt.Println("退出程序...")
            return
        default:
            fmt.Println("无效命令,请重新输入。")
        }
    }
}

3. 代码解释

  • 结构体和变量:我们定义了一个 Todo 结构体来表示待办事项,并使用一个切片 todos 来存储所有待办事项。同时,我们用 nextID 来自动生成待办事项的ID。

  • 函数实现

    • AddTodo(task string):用于添加待办事项。
    • ListTodos():列出目前所有的待办事项。
    • RemoveTodo(id int):根据ID删除相应的待办事项。
  • 用户输入处理:在 main.go 中,我们用 bufio.Scanner 处理命令行输入,通过不同的命令触发相应的功能。

运行与调试

在下一篇中,我们将探讨如何运行和调试这个简单的Go项目,验证其正确性并确保稳定性。

通过以上步骤,我们完成了简易项目中的代码编写部分,确保代码符合上篇需求分析中的设计。希望大家能在实践中逐步掌握Go语言的基本语法和项目结构设计,为后续进阶学习打下坚实的基础。