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

yiigo 4.x 版本发布

  •  
  •   IIInsomnia ·
    shenghui0779 · Oct 25, 2019 · 4263 views
    This topic created in 2549 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   ·   Privacy   ·   Solana   ·   2700 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 15:43 · PVG 23:43 · LAX 08:43 · JFK 11:43
    ♥ Do have faith in what you're doing.