
Go 轻量级开发通用库
Go1.11+
go get github.com/iiinsomnia/yiigo/v4 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 = "" yiigo.Env("app.env").String() yiigo.Env("app.debug").Bool() 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.tomlwhenapp.env = "dev"
// 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) // 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}) // 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") 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="), yiigo.WithRequestTimeout(5*time.Second), ) if err != nil { log.Fatal(err) } fmt.Println(string(b)) // default logger yiigo.Logger().Info("hello world") // other logger yiigo.Logger("foo").Info("hello world") Enjoy
1 ihidchaos &nbp;2020 年 3 月 24 日 via Android 考虑增加支持 open tsdb,influxdb 等时序数据库吗 |
2 reus 2020 年 3 月 24 日 这种胶水库毫无意义。 |
3 ApiService 2020 年 3 月 24 日 yii 想起 php 的 yii 框架 |
4 runningman 2020 年 3 月 24 日 via Android 我倒是觉得挺好 其他个人自己写的反而不靠谱 这个网络层是 gin 我觉得就可以尝试用 |
5 freemoon 2020 年 3 月 24 日 就像脚手架一样-- |
6 runningman 2020 年 3 月 24 日 不过有些库还得自己选,或者说这个底层选择是正确的,不然也很头大。 |