yiigo 4.x - the best and the most wanted package for junior gophers, probably.

IIInsomnia · · 1056 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

# [yiigo](https://github.com/iiinsomnia/yiigo) [![golang](https://img.shields.io/badge/Language-Go-green.svg?style=flat)](https://golang.org) [![GitHub release](https://img.shields.io/github/release/IIInsomnia/yiigo.svg)](https://github.com/iiinsomnia/yiigo/releases/latest) [![GoDoc](https://godoc.org/github.com/iiinsomnia/yiigo?status.svg)](https://godoc.org/github.com/iiinsomnia/yiigo) [![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT) The best and the most wanted package for junior gophers, probably. ## Features - Support [MySQL](https://github.com/go-sql-driver/mysql) - Support [PostgreSQL](https://github.com/lib/pq) - Support [MongoDB](https://github.com/mongodb/mongo-go-driver) - Support [Redis](https://github.com/gomodule/redigo) - Support [Zipkin](https://github.com/openzipkin/zipkin-go) - Support [Apollo](https://github.com/philchia/agollo) - Use [gomail](https://github.com/go-gomail/gomail) for email sending - Use [toml](https://github.com/pelletier/go-toml) for configuration - Use [sqlx](https://github.com/jmoiron/sqlx) for SQL executing - Use [gorm](https://gorm.io/) for ORM operating - Use [zap](https://github.com/uber-go/zap) for logging ## Requirements `Go1.11+` ## Installation ```shell go get github.com/iiinsomnia/yiigo/v4 ``` ## Usage #### Config - `yiigo.toml` ```shell [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 ```go yiigo.Env("app.env").String() yiigo.Env("app.debug").Bool() ``` #### Apollo ```go type QiniuConfig struct { *yiigo.DefaultApolloConfig BucketName string `toml:"bucket_name"` } var qiniu = &QiniuConfig{DefaultApolloConfig: yiigo.NewDefaultConfig("qiniu", "qiniu")} if err := yiigo.StartApollo(qiniu); err != nil { log.Fatal(err) } ``` > Notice! Configs readed from `yiigo.toml` when `app.env = "dev"` #### MySQL ```go // 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 ```go // 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 ```go // 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 ```go 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 ```go // default logger yiigo.Logger().Info("hello world") // other logger yiigo.Logger("foo").Info("hello world") ``` ## Documentation - [API Reference](https://godoc.org/github.com/iiinsomnia/yiigo) - [TOML](https://github.com/toml-lang/toml) - [Example](https://github.com/iiinsomnia/yiigo-example) **Enjoy ????**

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1056 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传