// 文件读写
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
}
// 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)
}
}
// 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
}
// 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
}
// 单元测试
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()
// 执行需要分析的代码
}
// 实现增量备份功能
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)
// 并发爬取网页内容
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
// 完整的用户管理系统
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)
A: 使用bufio.Scanner或分块读取,避免内存溢出
A: 使用sql.DB的SetMaxOpenConns、SetMaxIdleConns等方法配置
A: 使用race detector:go run -race main.go
完成本阶段学习后,进入第四阶段:完整项目实践