yu

package module
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 2, 2021 License: Apache-2.0 Imports: 38 Imported by: 0

README

yu

Golang 开发辅助库

导入

import "github.com/yscsky/yu"

代码自动生成工具

使用说明

服务

app.go提供了一个服务启动的框架,有监听中断信号的功能。

可以自行实现AppInterfaceServerInterface接口,也可以用库中提供的。

参考examples/app_base_usage中代码。

server_gin.go,server_grpc.go是分别实现ServerInterface接口的服务。

可以参考examples下的server_gin_usageserver_grpc_usage中代码。

middleware.go提供的 gin 和 grpc 中间件。

client_http.goclient_grpc.go分别提供了 http 和 grpc 的客户端生成函数,可以参考examples下的client_gin_usageclient_grpc_usage中代码。

prometheus.go添加 prometheus 监控,提供了 http 和 grpc 的中间件。

数据库

db_gorm.go 使用 gorm 连接数据库,内置了 mysql 和 postgres 的连接方式,参考examples/db_gorm_usage中代码。

db_sqlx.go 使用 sqlx 连接数据库,内置了一个加了 statement 缓存的数据库操作结构,参考examples/db_sqlx_usage中代码。

db_redis.go 提供连接 redis 的函数,使用github.com/go-redis/redis/v8包。

其他

queue.go 使用 chan 实现多协程的队列处理,参考examples/queue_usage中代码。

serial.go 使用 chan 实现线程安全的序列生成器,参考examples/serial_usage中代码。

tstamp.go 实现一个时间戳类型,JSON 序列化为字符串,反序列化为 int64。

utils.go 提供了一系列便利的函数。

Documentation

Index

Constants

View Source
const (
	CodeOK = iota
	CodeErr
)

返回code值

View Source
const (
	// TimeLayout1 2006-01-02 15:04:05
	TimeLayout1 = "2006-01-02 15:04:05"
	// TimeLayout2 2006-01-02
	TimeLayout2 = "2006-01-02"
	// TimeLayout3 15:04:05
	TimeLayout3 = "15:04:05"
	// TimeLayout4 20060102150405
	TimeLayout4 = "20060102150405"
	// TimeLayout5 20060102
	TimeLayout5 = "20060102"
	// TimeLayout6 150405
	TimeLayout6 = "150405"
	// TimeLayout7 2006.01.02
	TimeLayout7 = "2006.01.02"
	// TimeLayout8 2006/01/02
	TimeLayout8 = "2006/01/02"
)

timestamp format layout

Variables

View Source
var (
	RequestCounter   *prometheus.CounterVec
	LatencyHistogram *prometheus.HistogramVec
	DurationsSummary *prometheus.SummaryVec
)

prmethous监控变量

Functions

func BasicAuth

func BasicAuth(username, password string) gin.HandlerFunc

BasicAuth 设置BasicAuth认证

func CORS

func CORS(acceptedOrigin, AcceptedMethods, AcceptedHeaders, MaxAge string) gin.HandlerFunc

CORS 设置跨域

func CreateFolder

func CreateFolder(path string) error

CreateFolder 创建path路径的文件夹

func Errf

func Errf(fomart string, v ...interface{})

Errf 固定格式打印错误信息

func GetCaller

func GetCaller(d int) (string, int)

GetCaller 获取调用方法名

func GetRealIP

func GetRealIP(req *http.Request) string

GetRealIP 获取真实IP

func GrpcRecovery

func GrpcRecovery(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo,
	handler grpc.UnaryHandler) (resp interface{}, err error)

GrpcRecovery grpc接口panic恢复中间件

func GzipJSON

func GzipJSON(c *gin.Context, data interface{})

GzipJSON gzip压缩发送JSON

func HeadSeparator

func HeadSeparator(path string) string

HeadSeparator 确保path以/开头

func InitPrometheus

func InitPrometheus(space, name string)

InitPrometheus 初始化Prometheus

func JSON

func JSON(c *gin.Context, data interface{})

JSON 发送JSON

func JsonErr

func JsonErr(c *gin.Context, err error)

JsonErr 反馈Err

func JsonMsg

func JsonMsg(c *gin.Context, msg string)

JsonMsg 反馈发生错误信息

func JsonOK

func JsonOK(c *gin.Context, data interface{})

JsonOK 反馈OK

func LoadJSON

func LoadJSON(name string, data interface{}) error

LoadJSON 解析name.json

func LoadOrSaveJSON

func LoadOrSaveJSON(name string, res interface{}, def func() interface{}) (err error)

LoadOrSaveJSON 解析name.json,不存在保存

func LoadOrSaveToml

func LoadOrSaveToml(name string, data interface{}, def func() interface{}) (err error)

LoadOrSaveToml 解析name.toml,不存在保存

func LoadToml

func LoadToml(name string, data interface{}) error

LoadToml 解析name.toml

func LogControl

func LogControl(trace bool, skip []string) gin.HandlerFunc

LogControl 控制gin是否输出log

func LogErr

func LogErr(err error, msg string)

LogErr 固定格式打印error

func Logf

func Logf(fomart string, v ...interface{})

Logf 固定格式打印信息

func MD5

func MD5(src string) []byte

MD5 获取字符串的MD5

func NewGrpcConn

func NewGrpcConn(addr string, opts ...grpc.DialOption) (*grpc.ClientConn, error)

NewGrpcConn 创建grpc.ClientConn,with insecure and block

func NewRedisClient

func NewRedisClient(addr, pass string, db int) *redis.Client

NewRedisClient 根据db编号创建redis.Client

func NewRedisClients

func NewRedisClients(addr, pass string) (clients map[int]*redis.Client, err error)

NewRedisClients 创建redis.Client map以db编号为key

func NoCache

func NoCache() gin.HandlerFunc

NoCache 设置请求头为无缓存

func PromeMetrics

func PromeMetrics() gin.HandlerFunc

PromeMetrics prometheus metrics 中间件

func PromeTrace

func PromeTrace(label string) func()

PromeTrace promethous数据记录

func PromeUnaryInterceptor

func PromeUnaryInterceptor() grpc.ServerOption

PromeUnaryInterceptor promethous grpc中间件

func PromethousHandler

func PromethousHandler() gin.HandlerFunc

PromethousHandler 启动promethous http监听

func RandomString

func RandomString(n int) string

RandomString 生成n长度的字符串

func Run

func Run(app AppInterface)

Run 运行服务

func SaveJSON

func SaveJSON(name string, data interface{}) error

SaveJSON 保存到name.json

func SaveToml

func SaveToml(name string, data interface{}) error

SaveToml 保存到name.toml

func StrTime

func StrTime(timestamp int64, timeLayout string) string

StrTime 将时间戳转成字符串

func TailSeparator

func TailSeparator(path string) string

TailSeparator 确保path以/结尾

func ToJsonStr

func ToJsonStr(data interface{}) string

ToJsonStr 将结构体转成json字符串

func Trace

func Trace(msg string) func()

Trace 耗时检测

func TraceUnaryInt

func TraceUnaryInt(ctx context.Context, method string, req, reply interface{},
	cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error

TraceUnaryInt 计算客户端请求耗时

func UUID

func UUID() string

UUID 生成没有-的UUID

func UnixTime

func UnixTime(timeStr, layout string) int64

UnixTime 将字符串转成时间戳

func Warnf

func Warnf(fomart string, v ...interface{})

Warnf 固定格式打印警告信息

func WithTrace added in v0.0.3

func WithTrace() grpc.DialOption

WithTrace 返回TraceUnaryInt的DialOption

Types

type App

type App struct {
	Na    string
	Start func() bool
	Stop  func()
	Svrs  []ServerInterface
}

App 内置App

func NewApp

func NewApp(name string, start func() bool, stop func(), svrs ...ServerInterface) *App

NewApp 创建内置App

func (*App) Name

func (a *App) Name() string

Name 实现 Name() string 接口

func (*App) OnStart

func (a *App) OnStart() bool

OnStart 实现 OnStart() bool 接口

func (*App) OnStop

func (a *App) OnStop()

OnStop 实现 OnStop() 接口

func (*App) Servers

func (a *App) Servers() []ServerInterface

Servers 实现 Servers() []ServerInterface 接口

type AppInterface

type AppInterface interface {
	Name() string
	Servers() []ServerInterface
	OnStart() bool
	OnStop()
}

AppInterface 应用实现接口

type DSN

type DSN struct {
	Username string
	Password string
	URL      string
	Port     string
	DBName   string
	SkipTran bool
	PreStmt  bool
	LogLevel logger.LogLevel
}

DSN 连接数据库路由参数

func (DSN) MySQL

func (d DSN) MySQL() string

MySQL 生成MySQL的dsn

func (DSN) Postgres

func (d DSN) Postgres() string

Postgres 生成Postgres的dsn

type GinServer

type GinServer struct {
	Name   string
	Server *http.Server
	Engine *gin.Engine
}

GinServer 包含gin的http server

func NewGinServer

func NewGinServer(name, addr, mod string) *GinServer

NewGinServer 创建GinServer

func (*GinServer) Group

func (s *GinServer) Group(path string, handlers ...gin.HandlerFunc) *gin.RouterGroup

Group 创建gin.RouterGroup

func (*GinServer) Health

func (s *GinServer) Health()

Health 健康检查接口,需要的话设置

func (*GinServer) Info

func (s *GinServer) Info() string

Info 实现ServerInterface接口

func (*GinServer) OnStart

func (s *GinServer) OnStart() bool

OnStart 实现ServerInterface接口

func (*GinServer) OnStop

func (s *GinServer) OnStop()

OnStop 实现ServerInterface接口

func (*GinServer) Promethous

func (s *GinServer) Promethous(name, pass string)

Promethous 启动Promethous监听

type GormDB

type GormDB struct {
	*gorm.DB
}

GormDB 内嵌*gorm.DB,添加封装方法

func MustOpen

func MustOpen(dial gorm.Dialector, d DSN) *GormDB

MustOpen 无错的连接数据库并返回*GormDB

func MustOpenMySQL

func MustOpenMySQL(d DSN) *GormDB

MustOpenMySQL 无错的连接MySQL返回*gorm.DB

func MustOpenPostgres

func MustOpenPostgres(d DSN) *GormDB

MustOpenPostgres 无错的连接Postgres返回*gorm.DB

func (*GormDB) BatchInsert

func (db *GormDB) BatchInsert(tb string, value interface{}, batchSize int) error

BatchInsert 批量插入数据

func (*GormDB) CloseDB

func (gdb *GormDB) CloseDB()

CloseDB 关闭数据库连接

func (*GormDB) ExecSQL

func (db *GormDB) ExecSQL(sql string, values ...interface{}) (int64, error)

ExecSQL 直接执行sql

func (*GormDB) Insert

func (db *GormDB) Insert(tb string, value interface{}) error

Insert 插入数据

func (*GormDB) Query

func (db *GormDB) Query(dest interface{}, stmt string, values ...interface{}) error

Query 查询数据

func (*GormDB) QueryRow

func (db *GormDB) QueryRow(stmt string, values ...interface{}) *sql.Row

QueryRow 获取*sql.Row

func (*GormDB) QueryRows

func (db *GormDB) QueryRows(hand func(*sql.Rows) error, sql string, values ...interface{}) (err error)

QueryRows 批量查询使用rows行扫描处理

type GrpcConn added in v0.0.3

type GrpcConn struct {
	// contains filtered or unexported fields
}

GrpcConn grpc连接执行

type GrpcConnManager added in v0.0.3

type GrpcConnManager struct {
	// contains filtered or unexported fields
}

GrpcConnManager grpc连接管理器

func NewGrpcConnManager added in v0.0.3

func NewGrpcConnManager() *GrpcConnManager

NewGrpcConnManager 创建grpc连接管理器

func (*GrpcConnManager) AddConn added in v0.0.3

func (gm *GrpcConnManager) AddConn(name, addr string, connecter GrpcConnecter, opts ...grpc.DialOption)

AddConn 添加grpc连接

func (*GrpcConnManager) CloseConns added in v0.0.3

func (gm *GrpcConnManager) CloseConns()

CloseConns 关闭所有连接

func (*GrpcConnManager) Reconnect added in v0.0.3

func (gm *GrpcConnManager) Reconnect(name string)

Reconnect 重新grpc连接

type GrpcConnecter added in v0.0.3

type GrpcConnecter interface {
	OnConnected(*grpc.ClientConn)
}

GrpcConnecter grpc连接接口

type GrpcServer

type GrpcServer struct {
	Name string
	Addr string
	*grpc.Server
	Register func(*GrpcServer)
}

GrpcServer 封装grpc server

func NewGrpcServer

func NewGrpcServer(name, addr string, reg func(*GrpcServer), opt ...grpc.ServerOption) *GrpcServer

NewGrpcServer 创建GrpcServer

func (*GrpcServer) Info

func (gs *GrpcServer) Info() string

Info 实现ServerInterface接口

func (*GrpcServer) OnStart

func (gs *GrpcServer) OnStart() bool

OnStart 实现ServerInterface接口

func (*GrpcServer) OnStop

func (gs *GrpcServer) OnStop()

OnStop 实现ServerInterface接口

type HttpClient

type HttpClient struct {
	*http.Client
}

HttpClient 嵌入http.Client,添加一些方法

func NewHttpClient

func NewHttpClient() *HttpClient

NewHttpClient 创建HttpClient

func (*HttpClient) GetJSON

func (c *HttpClient) GetJSON(url string, data interface{}) (err error)

GetJSON GET请求,解析JSON

func (*HttpClient) GetJSONAuth

func (c *HttpClient) GetJSONAuth(url, un, pa string, data interface{}) (err error)

GetJSONAuth GET请求带BasicAuth认证,解析JSON

func (*HttpClient) PostFormJSON

func (c *HttpClient) PostFormJSON(url string, vals url.Values, data interface{}) (err error)

PostFormJSON POST请求,参数Form表单,解析JSON

func (*HttpClient) PostFormJSONAuth

func (c *HttpClient) PostFormJSONAuth(url, un, pa string, vals url.Values, data interface{}) (err error)

PostFormJSONAuth POST请求带BasicAuth认证,参数Form表单,解析JSON

func (*HttpClient) PostJSON

func (c *HttpClient) PostJSON(url string, src, data interface{}) (err error)

PostJSON POST JSON请求,解析JSON

func (*HttpClient) PostJSONAuth

func (c *HttpClient) PostJSONAuth(url, un, pa string, src, data interface{}) (err error)

PostJSONAuth POST JSON请求带BasicAuth认证,解析JSON

type MqttSubPub

type MqttSubPub struct {
	// contains filtered or unexported fields
}

MqttSubPub MQTT发布订阅

func NewMqttSubPub

func NewMqttSubPub(id, addr, user, pass string, topics ...string) *MqttSubPub

NewMqttSubPub 创建MqttSubPub

func (*MqttSubPub) Info

func (m *MqttSubPub) Info() string

Info 实现ServerInterface接口

func (*MqttSubPub) OnStart

func (m *MqttSubPub) OnStart() bool

OnStart 实现ServerInterface接口

func (*MqttSubPub) OnStop

func (m *MqttSubPub) OnStop()

OnStop 实现ServerInterface接口

func (*MqttSubPub) Pub

func (m *MqttSubPub) Pub(topic string, payload []byte)

Pub 发布消息到MQTT

func (*MqttSubPub) SetSubDeal

func (m *MqttSubPub) SetSubDeal(deal func(mqtt.Message))

SetSubDeal 设置订阅处理回调

type Queue

type Queue struct {
	// contains filtered or unexported fields
}

Queue 队列

func NewQueue

func NewQueue(size, num int, deal dealFunc) *Queue

NewQueue 新建队列

func (*Queue) Start

func (q *Queue) Start()

Start 启动队列

func (*Queue) Stop

func (q *Queue) Stop()

Stop 停止队列

func (*Queue) SubmitAsync

func (q *Queue) SubmitAsync(item interface{})

SubmitAsync 非阻塞提交队列

func (*Queue) SubmitSync

func (q *Queue) SubmitSync(item interface{})

SubmitSync 阻塞提交队列

type QueueManager

type QueueManager struct {
	// contains filtered or unexported fields
}

QueueManager 队列管理器

func NewQueueManager

func NewQueueManager() *QueueManager

NewQueueManager 新建队列管理器

func (*QueueManager) AddQueue

func (qm *QueueManager) AddQueue(q *Queue)

AddQueue 管理器中添加队列

func (*QueueManager) GetQueue

func (qm *QueueManager) GetQueue(i int) *Queue

GetQueue 管理器中获取队列

func (*QueueManager) PushQueue

func (qm *QueueManager) PushQueue(i int, args interface{}, async bool)

PushQueue 添加任务到管理器队列中

func (*QueueManager) StartQueue

func (qm *QueueManager) StartQueue()

StartQueue 管理器启动所有队列

func (*QueueManager) StopQueue

func (qm *QueueManager) StopQueue()

StopQueue 管理器停止所有队列

type Resp

type Resp struct {
	Code int         `json:"code"`
	Data interface{} `json:"data,omitempty"`
}

Resp http统一返回结构

func NewResp

func NewResp(code int, data interface{}) *Resp

NewResp 创建一个返回结构

func RespErr

func RespErr(err error) *Resp

RespErr 创建一个返回error的结构

func RespMsg

func RespMsg(code int, msg string) *Resp

RespMsg 创建一个返回字符串信息的结构

func RespOK

func RespOK(data interface{}) *Resp

RespOK 创建一个返回OK的结构

type Serial

type Serial struct {
	// contains filtered or unexported fields
}

Serial 序列生成器

func NewSerial

func NewSerial(reset int) *Serial

NewSerial 创建Serial

func (*Serial) Get

func (s *Serial) Get() int

Get 获取序列值

func (*Serial) Reset

func (s *Serial) Reset(c int)

Reset 重置计数

func (*Serial) Start

func (s *Serial) Start()

Start 开始序列生成器

type ServerInterface

type ServerInterface interface {
	OnStart() bool
	OnStop()
	Info() string
}

ServerInterface 服务实现接口

type StmtDB

type StmtDB struct {
	*sqlx.DB
	// contains filtered or unexported fields
}

StmtDB 嵌入sqlx.DB,加了statement缓存

func NewStmtDB

func NewStmtDB(db *sqlx.DB) *StmtDB

NewStmtDB 创建StmtDB

func (*StmtDB) CloseDB

func (s *StmtDB) CloseDB()

CloseDB 关闭StmtDB

func (*StmtDB) DeferLock

func (s *StmtDB) DeferLock() func()

DeferLock 合并锁的使用 example: defer s.DeferLock()()

func (*StmtDB) Lock

func (s *StmtDB) Lock()

Lock 使用锁

func (*StmtDB) NStmt

func (s *StmtDB) NStmt(sqlStr string) (stmt *sqlx.NamedStmt, err error)

NStmt g懒加载的方式缓存sqlx.NamedStmt

func (*StmtDB) Stmt

func (s *StmtDB) Stmt(sqlStr string) (stmt *sqlx.Stmt, err error)

Stmt 懒加载的方式缓存sqlx.Stmt

func (*StmtDB) Unlock

func (s *StmtDB) Unlock()

Unlock 释放锁

type TStamp

type TStamp int64

TStamp custom type for int64

func NewStampTime

func NewStampTime(te time.Time) TStamp

NewStampTime new TStamp by time.Time

func NewStrStamp

func NewStrStamp(ts string) TStamp

NewStrStamp new TStamp by time string

func NewTimeStamp

func NewTimeStamp(ts int64) TStamp

NewTimeStamp new TStamp

func (TStamp) Format

func (t TStamp) Format(layout string) string

Format get format time

func (TStamp) GoString

func (t TStamp) GoString() string

GoString implement GoStringer

func (TStamp) Int64

func (t TStamp) Int64() int64

Int64 get int64 value

func (TStamp) MarshalJSON

func (t TStamp) MarshalJSON() (buf []byte, err error)

MarshalJSON implement Marshaler

func (TStamp) String

func (t TStamp) String() string

String implement Stringer

func (TStamp) Time

func (t TStamp) Time() time.Time

Time get time.Time

func (*TStamp) UnmarshalJSON

func (t *TStamp) UnmarshalJSON(b []byte) error

UnmarshalJSON implement Unmarshaler

type XmlMap

type XmlMap map[string]string

XmlMap xml转换map

func (XmlMap) MarshalXML

func (m XmlMap) MarshalXML(e *xml.Encoder, start xml.StartElement) error

MarshalXML marshals the map to XML

func (*XmlMap) UnmarshalXML

func (m *XmlMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error

UnmarshalXML unmarshals the XML into a map of string to strings

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL