golang高性能服务器框架基础库插件common的使用
golang高性能服务器框架基础库插件common的使用
概述
Common Library 是一个用于在 Golang 中构建微服务(或单体)的编程工具包。它解决了分布式系统和应用程序架构中的常见问题,让开发者能够更加专注于交付业务价值。
该工具包兼容目前市场上绝大部分的服务框架:Kite、ServiceComb、go-kit、CloudWeGo/KiteX、gin、beego等。
主要特性
- 各package相互独立,可按需使用
- 减少外部版本依赖,自形成态
- 无业务逻辑,全开放基础能力实现
- 没有特定工具或技术的强制要求
安装
go get github.com/kubeservice-stack/common
基础使用示例
下面是一个使用common库构建高性能HTTP服务器的基本示例:
package main
import (
"context"
"net/http"
"github.com/kubeservice-stack/common/pkg/config"
"github.com/kubeservice-stack/common/pkg/logger"
"github.com/kubeservice-stack/common/pkg/server"
)
func main() {
// 初始化配置
cfg := config.NewDefaultConfig()
// 初始化日志
log := logger.NewLogger(cfg.Log)
// 创建HTTP服务器
httpServer := server.NewHTTPServer(
server.WithLogger(log),
server.WithAddress(":8080"),
)
// 添加路由
httpServer.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello from common library server!"))
})
// 启动服务器
if err := httpServer.Start(context.Background()); err != nil {
log.Fatal("Failed to start server: %v", err)
}
// 等待服务器关闭
httpServer.Await()
}
配置管理示例
common库提供了强大的配置管理功能:
package main
import (
"fmt"
"github.com/kubeservice-stack/common/pkg/config"
)
type AppConfig struct {
Server struct {
Port int `yaml:"port"`
} `yaml:"server"`
Database struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
Username string `yaml:"username"`
Password string `yaml:"password"`
} `yaml:"database"`
}
func main() {
// 创建配置管理器
cfgManager := config.NewConfigManager()
// 加载配置文件
var appConfig AppConfig
if err := cfgManager.Load("config.yaml", &appConfig); err != nil {
panic(fmt.Sprintf("Failed to load config: %v", err))
}
// 使用配置
fmt.Printf("Server will run on port: %d\n", appConfig.Server.Port)
fmt.Printf("Database connection: %s:%d\n", appConfig.Database.Host, appConfig.Database.Port)
}
日志系统示例
common库提供了灵活的日志系统:
package main
import (
"github.com/kubeservice-stack/common/pkg/config"
"github.com/kubeservice-stack/common/pkg/logger"
)
func main() {
// 创建日志配置
logCfg := &config.LogConfig{
Level: "debug",
Format: "json",
Output: "stdout",
}
// 初始化日志
log := logger.NewLogger(logCfg)
// 使用日志
log.Debug("This is a debug message")
log.Info("This is an info message")
log.Warn("This is a warning message")
log.Error("This is an error message")
// 带上下文的日志
log.WithFields(map[string]interface{}{
"user_id": 123,
"action": "login",
}).Info("User logged in")
}
依赖管理
Common Library基于go mod支持多golang语言版本编译,最小golang版本支持1.22。
许可证
该项目采用Apache-2.0 license许可证。
更多关于golang高性能服务器框架基础库插件common的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang高性能服务器框架基础库插件common的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang高性能服务器框架基础库插件Common的使用
Common库是许多高性能Golang服务器框架中的基础组件,提供了一系列通用的工具和功能。下面我将介绍Common库的核心功能及使用示例。
核心功能
- 日志系统:提供分级日志输出
- 配置管理:支持多种格式的配置文件解析
- 工具函数:常用工具方法集合
- 错误处理:增强的错误处理机制
- 性能监控:基础性能指标收集
基本使用示例
1. 日志系统使用
package main
import (
"github.com/xxx/common/log"
)
func main() {
// 初始化日志配置
log.InitLogger("./logs", "app.log", "debug")
// 不同级别日志输出
log.Debug("这是一条debug日志")
log.Info("这是一条info日志")
log.Warn("这是一条warn日志")
log.Error("这是一条error日志")
// 格式化日志
log.Infof("用户ID: %d, 用户名: %s", 123, "张三")
// 带字段的日志
log.WithFields(log.Fields{
"event": "login",
"ip": "192.168.1.1",
}).Info("用户登录")
}
2. 配置管理
package main
import (
"fmt"
"github.com/xxx/common/config"
)
type AppConfig struct {
Server struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
} `yaml:"server"`
Database struct {
DSN string `yaml:"dsn"`
} `yaml:"database"`
}
func main() {
var cfg AppConfig
// 加载YAML配置文件
err := config.LoadConfig("./config.yaml", &cfg)
if err != nil {
panic(err)
}
fmt.Printf("服务器地址: %s:%d\n", cfg.Server.Host, cfg.Server.Port)
fmt.Printf("数据库DSN: %s\n", cfg.Database.DSN)
}
3. 工具函数
package main
import (
"fmt"
"github.com/xxx/common/util"
)
func main() {
// 字符串处理
fmt.Println(util.SubString("Hello World", 0, 5)) // 输出: Hello
// 时间处理
fmt.Println(util.GetCurrentTimeStr()) // 输出当前时间字符串
// 加密解密
encrypted := util.AesEncrypt("secret data", "mykey")
decrypted := util.AesDecrypt(encrypted, "mykey")
fmt.Println(decrypted) // 输出: secret data
// 生成随机字符串
fmt.Println(util.RandString(10)) // 10位随机字符串
}
4. 错误处理
package main
import (
"fmt"
"github.com/xxx/common/errors"
)
func getUser(id int) (string, error) {
if id < 0 {
return "", errors.New("ID不能为负数").WithCode(1001)
}
if id > 1000 {
return "", errors.New("用户不存在").WithCode(1002)
}
return fmt.Sprintf("用户%d", id), nil
}
func main() {
user, err := getUser(-1)
if err != nil {
if e, ok := err.(*errors.Error); ok {
fmt.Printf("错误代码: %d, 错误信息: %s\n", e.Code(), e.Error())
} else {
fmt.Println("未知错误:", err)
}
return
}
fmt.Println("获取用户:", user)
}
5. 性能监控
package main
import (
"net/http"
"github.com/xxx/common/metrics"
)
func main() {
// 初始化指标
metrics.InitMetrics()
// 注册HTTP指标处理器
http.Handle("/metrics", metrics.Handler())
// 业务代码中记录指标
metrics.CounterInc("login_requests")
metrics.GaugeSet("online_users", 150)
// 启动HTTP服务
http.ListenAndServe(":8080", nil)
}
最佳实践
-
日志使用建议:
- 生产环境使用Info级别及以上
- 关键业务流程添加足够的日志点
- 避免在循环中记录大量日志
-
配置管理建议:
- 区分不同环境的配置文件
- 敏感信息不要明文存储在配置文件中
- 支持配置热更新
-
错误处理建议:
- 为不同错误定义明确的错误码
- 错误信息应当对用户友好
- 记录详细的错误上下文
-
性能监控建议:
- 定义清晰的指标命名规范
- 监控关键业务指标
- 设置合理的告警阈值
Common库作为基础组件,合理使用可以大幅提升开发效率和系统可维护性。建议根据实际项目需求进行适当封装,形成项目自身的工具库。