33 简易项目实战之编写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语言的基本语法和项目结构设计,为后续进阶学习打下坚实的基础。