The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
IIInsomnia

yiigo 4.x 版本发布

  •  
  •   IIInsomnia ·
    shenghui0779 · Oct 25, 2019 · 3909 views
    This topic created in 2399 days ago, the information mentioned may be changed or developed.

    yiigo

    golang GitHub release GoDoc MIT license

    The best and the most wanted package for junior gophers, probably.

    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 {
        *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)
    }
    

    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 😊

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3794 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 05:06 · PVG 13:06 · LAX 22:06 · JFK 01:06
    ♥ Do have faith in what you're doing.