V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
IIInsomnia

yiigo 4.x 版本发布

  •  
  •   IIInsomnia ·
    shenghui0779 · Oct 25, 2019 · 3845 views
    This topic created in 2379 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   ·   1020 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 905ms · UTC 18:10 · PVG 02:10 · LAX 11:10 · JFK 14:10
    ♥ Do have faith in what you're doing.