From 6cdadd518e3dc04f10f6c0ec5bd521b219e99bb5 Mon Sep 17 00:00:00 2001 From: vCaesar Date: Sat, 10 Jun 2017 11:54:37 +0800 Subject: [PATCH] Format and remove 05.6.md spaces --- zh/05.6.md | 242 ++++++++++++++++++++++++++--------------------------- 1 file changed, 121 insertions(+), 121 deletions(-) diff --git a/zh/05.6.md b/zh/05.6.md index bac319d8..1cf2c908 100644 --- a/zh/05.6.md +++ b/zh/05.6.md @@ -18,78 +18,78 @@ Go目前支持redis的驱动有如下 我以redigo驱动为例来演示如何进行数据的操作: ```Go - package main +package main - import ( - "fmt" - "github.com/garyburd/redigo/redis" - "os" +import ( + "fmt" + "github.com/garyburd/redigo/redis" + "os" "os/signal" - "syscall" - "time" - ) + "syscall" + "time" +) - var ( - Pool *redis.Pool - ) +var ( + Pool *redis.Pool +) - func init() { - redisHost := ":6379" - Pool = newPool(redisHost) - close() +func init() { + redisHost := ":6379" + Pool = newPool(redisHost) + close() +} + +func newPool(server string) *redis.Pool { + + return &redis.Pool{ + + MaxIdle: 3, + IdleTimeout: 240 * time.Second, + + Dial: func() (redis.Conn, error) { + c, err := redis.Dial("tcp", server) + if err != nil { + return nil, err + } + return c, err + }, + + TestOnBorrow: func(c redis.Conn, t time.Time) error { + _, err := c.Do("PING") + return err + }, } +} - func newPool(server string) *redis.Pool { +func close() { + c := make(chan os.Signal, 1) + signal.Notify(c, os.Interrupt) + signal.Notify(c, syscall.SIGTERM) + signal.Notify(c, syscall.SIGKILL) + go func() { + <-c + Pool.Close() + os.Exit(0) + }() +} - return &redis.Pool{ +func Get(key string) ([]byte, error) { - MaxIdle: 3, - IdleTimeout: 240 * time.Second, + conn := Pool.Get() + defer conn.Close() - Dial: func() (redis.Conn, error) { - c, err := redis.Dial("tcp", server) - if err != nil { - return nil, err - } - return c, err - }, - - TestOnBorrow: func(c redis.Conn, t time.Time) error { - _, err := c.Do("PING") - return err - }, - } + var data []byte + data, err := redis.Bytes(conn.Do("GET", key)) + if err != nil { + return data, fmt.Errorf("error get key %s: %v", key, err) } + return data, err +} - func close() { - c := make(chan os.Signal, 1) - signal.Notify(c, os.Interrupt) - signal.Notify(c, syscall.SIGTERM) - signal.Notify(c, syscall.SIGKILL) - go func() { - <-c - Pool.Close() - os.Exit(0) - }() - } - - func Get(key string) ([]byte, error) { - - conn := Pool.Get() - defer conn.Close() - - var data []byte - data, err := redis.Bytes(conn.Do("GET", key)) - if err != nil { - return data, fmt.Errorf("error get key %s: %v", key, err) - } - return data, err - } - - func main() { - test, err := Get("test") - fmt.Println(test, err) - } +func main() { + test, err := Get("test") + fmt.Println(test, err) +} ``` @@ -100,35 +100,35 @@ https://github.com/astaxie/goredis 接下来的以我自己fork的这个redis驱动为例来演示如何进行数据的操作 ```Go - package main +package main - import ( - "github.com/astaxie/goredis" - "fmt" - ) +import ( + "github.com/astaxie/goredis" + "fmt" +) - func main() { - var client goredis.Client - // 设置端口为redis默认端口 - client.Addr = "127.0.0.1:6379" - - //字符串操作 - client.Set("a", []byte("hello")) - val, _ := client.Get("a") - fmt.Println(string(val)) - client.Del("a") +func main() { + var client goredis.Client + // 设置端口为redis默认端口 + client.Addr = "127.0.0.1:6379" + + //字符串操作 + client.Set("a", []byte("hello")) + val, _ := client.Get("a") + fmt.Println(string(val)) + client.Del("a") - //list操作 - vals := []string{"a", "b", "c", "d", "e"} - for _, v := range vals { - client.Rpush("l", []byte(v)) - } - dbvals,_ := client.Lrange("l", 0, 4) - for i, v := range dbvals { - println(i,":",string(v)) - } - client.Del("l") + //list操作 + vals := []string{"a", "b", "c", "d", "e"} + for _, v := range vals { + client.Rpush("l", []byte(v)) } + dbvals,_ := client.Lrange("l", 0, 4) + for i, v := range dbvals { + println(i,":",string(v)) + } + client.Del("l") +} ``` 我们可以看到操作redis非常的方便,而且我实际项目中应用下来性能也很高。client的命令和redis的命令基本保持一致。所以和原生态操作redis非常类似。 @@ -148,52 +148,52 @@ MongoDB是一个高性能,开源,无模式的文档型数据库,是一个 安装mgo: ```Go - go get gopkg.in/mgo.v2 +go get gopkg.in/mgo.v2 ``` 下面我将演示如何通过Go来操作mongoDB: ```Go - package main +package main - import ( - "fmt" - "gopkg.in/mgo.v2" - "gopkg.in/mgo.v2/bson" - "log" - ) +import ( + "fmt" + "gopkg.in/mgo.v2" + "gopkg.in/mgo.v2/bson" + "log" +) - type Person struct { - Name string - Phone string +type Person struct { + Name string + Phone string +} + +func main() { + session, err := mgo.Dial("server1.example.com,server2.example.com") + if err != nil { + panic(err) + } + defer session.Close() + + // Optional. Switch the session to a monotonic behavior. + session.SetMode(mgo.Monotonic, true) + + c := session.DB("test").C("people") + err = c.Insert(&Person{"Ale", "+55 53 8116 9639"}, + &Person{"Cla", "+55 53 8402 8510"}) + if err != nil { + log.Fatal(err) } - func main() { - session, err := mgo.Dial("server1.example.com,server2.example.com") - if err != nil { - panic(err) - } - defer session.Close() - - // Optional. Switch the session to a monotonic behavior. - session.SetMode(mgo.Monotonic, true) - - c := session.DB("test").C("people") - err = c.Insert(&Person{"Ale", "+55 53 8116 9639"}, - &Person{"Cla", "+55 53 8402 8510"}) - if err != nil { - log.Fatal(err) - } - - result := Person{} - err = c.Find(bson.M{"name": "Ale"}).One(&result) - if err != nil { - log.Fatal(err) - } - - fmt.Println("Phone:", result.Phone) + result := Person{} + err = c.Find(bson.M{"name": "Ale"}).One(&result) + if err != nil { + log.Fatal(err) } + fmt.Println("Phone:", result.Phone) +} + ``` 我们可以看出来mgo的操作方式和beedb的操作方式几乎类似,都是基于struct的操作方式,这个就是Go Style。