Golang Go语言 轻量级开发通用库
Golang Go语言 轻量级开发通用库
yiigo
Go 轻量级开发通用库
Features
- Support MySQL
- Support PostgreSQL
- Support MongoDB
- Support Redis
- Support Zipkin
- Support Apollo
- Use gomail for email sending
- Use toml for configuration
- Use sqlx for SQL executing
- Use gorm for ORM operating
- Use zap for logging
Requirements
Go1.11+
Installation
go get github.com/iiinsomnia/yiigo/v4
Usage
Config
yiigo.toml
[app]
env = "dev" # dev | beta | prod
debug = true
[apollo]
app_id = “test”
cluster = “default”
address = “127.0.0.1:8080”
cache_dir = “./”
[apollo.namespace]
# 指定配置对应的 namespace,用于在不同环境下(如:灰度和生产环境)指定不同的 namespace
[db]
[db.default]
driver = "mysql"
dsn = "username:password@tcp(localhost:3306)/dbname?timeout=10s&charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&loc=Local"
# dsn = "host=localhost port=5432 user=root password=secret dbname=test connect_timeout=10 sslmode=disable" # pgsql
max_open_conns = 20
max_idle_conns = 10
conn_max_lifetime = 60 # 秒
[mongo]
[mongo.default]
dsn = "mongodb://username:password@localhost:27017"
connect_timeout = 10 # 秒
pool_size = 10
max_conn_idle_time = 60 # 秒
mode = "primary" # primary | primary_preferred | secondary | secondary_preferred | nearest
[redis]
[redis.default]
address = "127.0.0.1:6379"
password = ""
database = 0
connect_timeout = 10 # 秒
read_timeout = 10 # 秒
write_timeout = 10 # 秒
pool_size = 10
pool_limit = 20
idle_timeout = 60 # 秒
wait_timeout = 10 # 秒
prefill_parallelism = 0
[log]
[log.default]
path = "app.log"
max_size = 500
max_age = 0
max_backups = 0
compress = true
[email]
host = “smtp.exmail.qq.com”
port = 25
username = “”
password = “”
- config usage
yiigo.Env("app.env").String()
yiigo.Env("app.debug").Bool()
Apollo
type QiniuConfig struct {
BucketName string `toml:"bucket_name"`
}
func (c *QiniuConfig) Namespace() string {
return yiigo.ApolloNamespace(“qiniu”, “qiniu”)
}
var Qiniu = new(QiniuConfig)
if err := yiigo.StartApollo(Qiniu); err != nil {
log.Fatal(err)
}
fmt.Println(Qiniu.BucketName)
Notice! Configs read from
yiigo.toml
whenapp.env = "dev"
MySQL
// default db
yiigo.DB().Get(&User{}, "SELECT * FROM `user` WHERE `id` = ?", 1)
yiigo.Orm().First(&User{}, 1)
// other db
yiigo.DB(“foo”).Get(&User{}, “SELECT * FROM user
WHERE id
= ?”, 1)
yiigo.Orm(“foo”).First(&User{}, 1)
MongoDB
// default mongodb
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
yiigo.Mongo().Database(“test”).Collection(“numbers”).InsertOne(ctx, bson.M{“name”: “pi”, “value”: 3.14159})
// other mongodb
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
yiigo.Mongo(“foo”).Database(“test”).Collection(“numbers”).InsertOne(ctx, bson.M{“name”: “pi”, “value”: 3.14159})
Redis
// default redis
conn, err := yiigo.Redis().Get()
if err != nil {
log.Fatal(err)
}
defer yiigo.Redis().Put(conn)
conn.Do(“SET”, “test_key”, “hello world”)
// other redis
conn, err := yiigo.Redis(“foo”).Get()
if err != nil {
log.Fatal(err)
}
defer yiigo.Redis(“foo”).Put(conn)
conn.Do(“SET”, “test_key”, “hello world”)
Zipkin
reporter := yiigo.NewZipkinHTTPReporter("http://localhost:9411/api/v2/spans")
// sampler
sampler := zipkin.NewModuloSampler(1)
// endpoint
endpoint, _ := zipkin.NewEndpoint(“yiigo-zipkin”, “localhost”)
tracer, err := yiigo.NewZipkinTracer(reporter,
zipkin.WithLocalEndpoint(endpoint),
zipkin.WithSharedSpans(false),
zipkin.WithSampler(sampler),
)
if err != nil {
log.Fatal(err)
}
client, err := tracer.HTTPClient(yiigo.WithZipkinClientOptions(zipkinHttp.ClientTrace(true)))
if err != nil {
log.Fatal(err)
}
b, err := client.Get(context.Background(), “url…”,
yiigo.WithRequestHeader(“Content-Type”, “application/json; charset=utf-8”),
yiigo.WithRequestTimeout(5*time.Second),
)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(b))
Logger
// default logger
yiigo.Logger().Info("hello world")
// other logger
yiigo.Logger(“foo”).Info(“hello world”)
Documentation
Enjoy 😊
更多关于Golang Go语言 轻量级开发通用库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
考虑增加支持 open tsdb,influxdb 等时序数据库吗
更多关于Golang Go语言 轻量级开发通用库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
yii 想起 php 的 yii 框架
我倒是觉得挺好 其他个人自己写的反而不靠谱 这个网络层是 gin 我觉得就可以尝试用
就像脚手架一样–
不过有些库还得自己选,或者说这个底层选择是正确的,不然也很头大。
在Golang(Go语言)生态系统中,存在许多轻量级的开发通用库,这些库为开发者提供了丰富的功能和工具,有助于提高开发效率和代码质量。以下是一些推荐的轻量级开发通用库:
- Gin:一个轻量级的Web框架,适合构建高性能的Web应用程序。它拥有优雅的API设计、高效的路由系统和强大的中间件支持。
- Gorm:一个简单且强大的Go语言ORM库,支持多种数据库(如MySQL、PostgreSQL和SQLite等),简化了数据库操作。
- Go Redis:一个高性能的Redis客户端,提供了易于使用的API来与Redis进行交互。
- sqlx:一个轻量级的数据库操作库,提供了比标准库更丰富的功能,如结构体映射等。
- Badger:一个纯Go实现的快速嵌入式K/V数据库,针对LSM tree做了优化,提供了高性能的存储解决方案。
- Bolt:一个广泛使用的K/V数据库,简单易用,适合用作嵌入式数据库。
- Gone:一个基于Golang的轻量级依赖注入框架,提供了依赖注入功能,并集成了一系列微服务常用的内置组件。
这些库各有特色,涵盖了Web开发、数据库操作、缓存管理、依赖注入等多个方面,开发者可以根据具体需求选择合适的库进行开发。