PX

像素拾光

记录技术旅程,分享开发经验

🐹

Go 语言的并发模型是其最引人注目的特性之一。通过 goroutine 和 channel,Go 提供了一种简洁而强大的方式来处理并发编程。

Goroutine 的基础使用

Goroutine 是 Go 运行时管理的轻量级线程。启动一个 goroutine 非常简单,只需要在函数调用前加上 go 关键字:

package main

import (
    "fmt"
    "time"
)

func printNumbers() {
    for i := 1; i <= 5; i++ {
        fmt.Printf("Number: %d\n", i)
        time.Sleep(100 * time.Millisecond)
    }
}

func main() {
    go printNumbers()
    go printNumbers()
    
    time.Sleep(1 * time.Second)
    fmt.Println("Main function ends")
}

Channel 通信

Channel 是 goroutine 之间通信的管道。它确保了数据的同步传输,避免了传统并发编程中常见的竞态条件:

ch := make(chan int)

go func() {
    ch <- 42  // 发送数据到 channel
}()

value := <-ch  // 从 channel 接收数据
fmt.Println(value)

通过合理使用 goroutine 和 channel,我们可以构建出高效、可维护的并发程序。

继续阅读 →
🐧

作为服务器运维和开发人员,掌握 Linux 系统性能监控和调优技巧至关重要。本文将介绍几个常用的性能监控工具和调优方法。

CPU 性能监控

使用 tophtop 命令可以实时查看系统 CPU 使用情况:

# 查看实时 CPU 使用情况
top

# 更友好的界面(需要安装)
htop

# 查看 CPU 平均负载
uptime

内存使用分析

监控内存使用情况对于防止 OOM(Out of Memory)错误非常重要:

# 查看内存使用详情
free -h

# 查看进程内存使用排序
ps aux --sort=-%mem | head -n 10

# 实时监控内存变化
watch -n 1 free -h

磁盘 I/O 优化

磁盘 I/O 往往是系统性能的瓶颈,使用 iostat 可以监控磁盘活动:

# 安装 sysstat 包
sudo apt install sysstat

# 每秒刷新一次磁盘统计信息
iostat -x 1

通过这些工具和方法,我们可以有效地识别和解决系统性能问题。

继续阅读 →
🐹

Go 语言的错误处理方式与其他语言不同,它采用显式的错误返回而不是异常机制。这种设计哲学鼓励开发者更加谨慎地处理错误。

基础错误处理

在 Go 中,函数通常返回一个结果和一个错误值:

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, fmt.Errorf("除数不能为零")
    }
    return a / b, nil
}

result, err := divide(10, 0)
if err != nil {
    log.Printf("错误: %v", err)
    return
}
fmt.Println(result)

自定义错误类型

通过实现 error 接口,我们可以创建更丰富的错误类型:

type ValidationError struct {
    Field string
    Message string
}

func (e *ValidationError) Error() string {
    return fmt.Sprintf("验证失败 [%s]: %s", e.Field, e.Message)
}

错误包装(Go 1.13+)

使用 %w 格式化动词可以包装错误,保留错误链:

if err != nil {
    return fmt.Errorf("无法读取配置: %w", err)
}

// 检查错误类型
if errors.Is(err, os.ErrNotExist) {
    // 处理文件不存在的情况
}

良好的错误处理是编写健壮 Go 程序的关键。

继续阅读 →
🐧

Systemd 是现代 Linux 发行版中广泛使用的初始化系统和服务管理器。它提供了强大而统一的方式来管理系统服务。

创建 Systemd 服务

创建一个服务单元文件 /etc/systemd/system/myapp.service

[Unit]
Description=我的应用服务
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/server
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

服务管理命令

使用 systemctl 命令管理服务:

# 启动服务
sudo systemctl start myapp

# 停止服务
sudo systemctl stop myapp

# 重启服务
sudo systemctl restart myapp

# 查看服务状态
sudo systemctl status myapp

# 设置开机自启
sudo systemctl enable myapp

# 查看服务日志
sudo journalctl -u myapp -f

高级配置

Systemd 还支持许多高级特性,如资源限制、环境变量配置等:

[Service]
Environment="PORT=8080"
Environment="ENV=production"
LimitNOFILE=65536
MemoryLimit=512M

掌握 Systemd 能让我们更好地管理和监控 Linux 服务。

继续阅读 →