Skip to content
🔥 Go è½»é‡çº§å¼€å‘通用库 🚀🚀🚀
Go
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore update Oct 24, 2019
LICENSE update Jul 6, 2017
README.md update Jun 10, 2020
apollo.go update apollo Jun 16, 2020
crypto.go update Mar 26, 2020
crypto_test.go update Mar 26, 2020
db.go update Mar 3, 2020
db_test.go update Mar 26, 2020
doc.go update readme Jun 9, 2020
env.go update env Jun 16, 2020
env_test.go update May 22, 2020
go.mod update Jun 9, 2020
go.sum update Jun 9, 2020
http.go update Aug 15, 2019
init.go update init Jun 10, 2020
logger.go remove log stacktrace Dec 20, 2019
mailer.go update mailer Apr 29, 2020
mongo.go update Dec 31, 2019
redis.go update Oct 25, 2019
slice.go update Mar 7, 2020
slice_test.go add some improments Mar 27, 2019
strings.go update hash Mar 24, 2020
strings_test.go update hash Mar 24, 2020
utils.go update go.mod May 23, 2020
utils_test.go update May 22, 2020
yiigo.toml.example update Jun 9, 2020
zipkin.go update Oct 24, 2019

README.md

yiigo

golang GitHub release pkg.go.dev MIT license

Go è½»é‡çº§å¼€å‘通用库

Features

  • æ”¯æŒ MySQL
  • æ”¯æŒ PostgreSQL
  • æ”¯æŒ MongoDB
  • æ”¯æŒ Redis
  • æ”¯æŒ Zipkin
  • æ”¯æŒ Apollo
  • é‚?件使用 gomail
  • é…ç½?使用 toml
  • SQL使用 sqlx
  • ORM使用 gorm
  • 日志使用 zap
  • 包å«ä¸€äº›å?žç”¨çš„å¸?助方法,如:httpã€cyptoã€dateã€IP ç­‰

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"
namespace = ["apollo_test"]
cache_dir = "./"
accesskey_secret = ""
insecure_skip_verify = true

[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]

    [email.default]
    host = "smtp.exmail.qq.com"
    port = 25
    username = ""
    password = ""

# apollo namespace

[apollo_test]
name = "yiigo"
  • usage
yiigo.Env("app.env").String("dev")
yiigo.Env("app.debug").Bool(true)
yiigo.Env("apollo_test.name").String("foo")

âš ï¸æ³¨æ„ï¼

如果é…ç½?了 apollo,则:

  1. namespace 中的é…ç½?项优先从 apollo 读å–,若ä¸å­˜åœ¨ï¼Œåˆ™ä»Ž yiigo.toml 中读å–ï¼›
  2. è‹¥ namespace ä¸åœ¨ apollo é…ç½?中,则其é…ç½?项从 yiigo.toml 中获å–;
  3. 当 app.env = "dev" 时,é…ç½?从 yiigo.toml 中读å–

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 😊

You can’t perform that action at this time.