Golang Go语言 轻量级开发通用库

发布于 1周前 作者 yibo5220 来自 Go语言

Golang Go语言 轻量级开发通用库

yiigo

Go 轻量级开发通用库

Features

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 when app.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

7 回复

考虑增加支持 open tsdb,influxdb 等时序数据库吗

更多关于Golang Go语言 轻量级开发通用库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这种胶水库毫无意义。

yii  想起 php 的 yii 框架

我倒是觉得挺好 其他个人自己写的反而不靠谱 这个网络层是 gin 我觉得就可以尝试用

就像脚手架一样–

不过有些库还得自己选,或者说这个底层选择是正确的,不然也很头大。

在Golang(Go语言)生态系统中,存在许多轻量级的开发通用库,这些库为开发者提供了丰富的功能和工具,有助于提高开发效率和代码质量。以下是一些推荐的轻量级开发通用库:

  1. Gin:一个轻量级的Web框架,适合构建高性能的Web应用程序。它拥有优雅的API设计、高效的路由系统和强大的中间件支持。
  2. Gorm:一个简单且强大的Go语言ORM库,支持多种数据库(如MySQL、PostgreSQL和SQLite等),简化了数据库操作。
  3. Go Redis:一个高性能的Redis客户端,提供了易于使用的API来与Redis进行交互。
  4. sqlx:一个轻量级的数据库操作库,提供了比标准库更丰富的功能,如结构体映射等。
  5. Badger:一个纯Go实现的快速嵌入式K/V数据库,针对LSM tree做了优化,提供了高性能的存储解决方案。
  6. Bolt:一个广泛使用的K/V数据库,简单易用,适合用作嵌入式数据库。
  7. Gone:一个基于Golang的轻量级依赖注入框架,提供了依赖注入功能,并集成了一系列微服务常用的内置组件。

这些库各有特色,涵盖了Web开发、数据库操作、缓存管理、依赖注入等多个方面,开发者可以根据具体需求选择合适的库进行开发。

回到顶部