# 第三阶段:Go语言实战模块 ## 学习目标 - 掌握Go语言在实际开发中的应用 - 理解文件操作、网络编程、数据库连接 - 能够开发完整的应用程序 - 掌握测试和调试技巧 ## 详细学习内容 ### 3.1 文件I/O操作 ```go // 文件读写 func readFile(filename string) (string, error) { data, err := os.ReadFile(filename) if err != nil { return "", err } return string(data), nil } func writeFile(filename, content string) error { return os.WriteFile(filename, []byte(content), 0644) } // 目录操作 func listFiles(dir string) ([]string, error) { entries, err := os.ReadDir(dir) if err != nil { return nil, err } var files []string for _, entry := range entries { files = append(files, entry.Name()) } return files, nil } ``` ### 3.2 网络编程 ```go // HTTP客户端 func httpGet(url string) (string, error) { resp, err := http.Get(url) if err != nil { return "", err } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return "", err } return string(body), nil } // HTTP服务器 func startHTTPServer() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") }) http.ListenAndServe(":8080", nil) } // TCP服务器 func startTCPServer() { ln, err := net.Listen("tcp", ":8080") if err != nil { log.Fatal(err) } for { conn, err := ln.Accept() if err != nil { log.Println(err) continue } go handleConnection(conn) } } ``` ### 3.3 数据库操作 ```go // MySQL连接 func connectDB() (*sql.DB, error) { db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/dbname") if err != nil { return nil, err } if err := db.Ping(); err != nil { return nil, err } return db, nil } // CRUD操作 type User struct { ID int Name string Age int } func createUser(db *sql.DB, user User) error { _, err := db.Exec("INSERT INTO users (name, age) VALUES (?, ?)", user.Name, user.Age) return err } func getUserByID(db *sql.DB, id int) (User, error) { var user User err := db.QueryRow("SELECT id, name, age FROM users WHERE id = ?", id).Scan(&user.ID, &user.Name, &user.Age) return user, err } ``` ### 3.4 JSON/XML数据处理 ```go // JSON序列化与反序列化 type Config struct { Host string `json:"host"` Port int `json:"port"` } func saveConfig(config Config) error { data, err := json.Marshal(config) if err != nil { return err } return os.WriteFile("config.json", data, 0644) } func loadConfig() (Config, error) { data, err := os.ReadFile("config.json") if err != nil { return Config{}, err } var config Config err = json.Unmarshal(data, &config) return config, err } ``` ### 3.5 测试与调试 ```go // 单元测试 func TestAdd(t *testing.T) { result := add(2, 3) if result != 5 { t.Errorf("Expected 5, got %d", result) } } // 基准测试 func BenchmarkAdd(b *testing.B) { for i := 0; i < b.N; i++ { add(1, 2) } } // 性能分析 func profileCPU() { f, err := os.Create("cpu.prof") if err != nil { log.Fatal(err) } defer f.Close() pprof.StartCPUProfile(f) defer pprof.StopCPUProfile() // 执行需要分析的代码 } ``` ## 练习项目 ### 项目1:文件备份工具 ```go // 实现增量备份功能 type BackupManager struct { sourceDir string backupDir string } func (bm *BackupManager) Backup() error func (bm *BackupManager) Restore(backupName string) error func (bm *BackupManager) ListBackups() ([]string, error) ``` ### 项目2:Web爬虫 ```go // 并发爬取网页内容 type Crawler struct { visited map[string]bool mutex sync.Mutex } func (c *Crawler) Crawl(url string, depth int) ([]string, error) func (c *Crawler) extractLinks(html string) []string ``` ### 项目3:数据库CRUD应用 ```go // 完整的用户管理系统 type UserService struct { db *sql.DB } func (us *UserService) CreateUser(user User) error func (us *UserService) GetUser(id int) (User, error) func (us *UserService) UpdateUser(user User) error func (us *UserService) DeleteUser(id int) error func (us *UserService) ListUsers() ([]User, error) ``` ## 推荐资源 ### 书籍 - 《Go Web编程》- Web开发实战 - 《Go语言编程》- 综合应用 - 《Go语言标准库》- 标准库详解 ### 在线资源 - [Go官方博客](https://blog.golang.org/) - 官方技术文章 - [Go语言中文网](https://studygolang.com/) - 中文社区资源 - [Awesome Go](https://awesome-go.com/) - Go优秀项目集合 ### 工具 - [Postman](https://www.postman.com/) - API测试 - [MySQL Workbench](https://www.mysql.com/products/workbench/) - 数据库管理 - [Wireshark](https://www.wireshark.org/) - 网络分析 ## 评估方式 ### 功能完整性测试 1. **文件备份工具**:增量备份、恢复功能、备份列表 2. **Web爬虫**:并发爬取、链接提取、去重处理 3. **数据库应用**:完整CRUD操作、事务处理 ### 代码质量评估 - 错误处理完整性 - 代码可读性和可维护性 - 性能优化程度 - 测试覆盖率 ### 时间安排(3-4周) - 第1-5天:文件操作与网络编程 - 第6-10天:数据库操作与数据处理 - 第11-15天:测试与调试技巧 - 第16-21天:项目练习与优化 ## 常见问题 ### Q: 如何处理大文件读写? A: 使用bufio.Scanner或分块读取,避免内存溢出 ### Q: 数据库连接池如何配置? A: 使用sql.DB的SetMaxOpenConns、SetMaxIdleConns等方法配置 ### Q: 如何调试并发程序? A: 使用race detector:go run -race main.go ## 下一步 完成本阶段学习后,进入第四阶段:完整项目实践