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. 日志系统:提供分级日志输出
  2. 配置管理:支持多种格式的配置文件解析
  3. 工具函数:常用工具方法集合
  4. 错误处理:增强的错误处理机制
  5. 性能监控:基础性能指标收集

基本使用示例

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)
}

最佳实践

  1. 日志使用建议

    • 生产环境使用Info级别及以上
    • 关键业务流程添加足够的日志点
    • 避免在循环中记录大量日志
  2. 配置管理建议

    • 区分不同环境的配置文件
    • 敏感信息不要明文存储在配置文件中
    • 支持配置热更新
  3. 错误处理建议

    • 为不同错误定义明确的错误码
    • 错误信息应当对用户友好
    • 记录详细的错误上下文
  4. 性能监控建议

    • 定义清晰的指标命名规范
    • 监控关键业务指标
    • 设置合理的告警阈值

Common库作为基础组件,合理使用可以大幅提升开发效率和系统可维护性。建议根据实际项目需求进行适当封装,形成项目自身的工具库。

回到顶部