go 架构根据标准库和第三方架构,为与 nosql 数据库交互提供了强大的作用。这种架构包含:1.mongodb库:mgo;2.redis库:redigo;3. cassandra 库:gocql。这种架构带来了与 mongodb、redis 和 cassandra 数据库交互的 api,包含建立连接、执行查询、插进、更新和删除文档等行为。
Go 架构与 NoSQL 数据库交互
NoSQL 数据库以其扩展性、稳定性和大容量存储水平而在当代应用程序中越来越流行。Go 语言利用其标准库和丰富第三方架构带来了与 NoSQL 数据库交互的强大功能。
以下是怎么使用Go 架构与 NoSQL 数据库交互:
1.MongoDB
库:[mgo](https://godoc.org/gopkg.in/mgo.v2)1
packagemain
import(
"context"
"fmt"
"log"
"time"
"gopkg.in/mgo.v2"
)
funcmain(){
//建立连接
session,err:=mgo.Dial("mongodb://localhost:27017")
iferr!=nil{
log.Fatal(err)
}
defersession.Close()
//获得选定数据库和结合
db:=session.DB("test")
collection:=db.C("users")
//插入文档
iferr:=collection.Insert(map[string]interface{}{"name":"Alice","age":30});err!=nil{
log.Fatal(err)
}
//查找文档
result:=&struct{Namestring}{Name:""}
iferr:=collection.Find(nil).One(result);err!=nil{
log.Fatal(err)
}
fmt.Println("Name:",result.Name)
//升级文档
if_,err:=collection.Update(map[string]interface{}{"name":"Alice"},map[string]interface{}{"age":31});err!=nil{
log.Fatal(err)
}
//删除文档
iferr:=collection.Remove(map[string]interface{}{"name":"Alice"});err!=nil{
log.Fatal(err)
}
}
2. Redis
库:[redigo](https://godoc.org/github.com/garyburd/redigo/redis)1
packagemain
import(
"fmt"
"log"
"github.com/garyburd/redigo/redis"
)
funcmain(){
//建立连接
conn,err:=redis.Dial("tcp","localhost:6379")
iferr!=nil{
log.Fatal(err)
}
deferconn.Close()
//设定键值对
if_,err:=conn.Do("SET","name","Alice");err!=nil{
log.Fatal(err)
}
//获得值
name,err:=redis.String(conn.Do("GET","name"))
iferr!=nil{
log.Fatal(err)
}
fmt.Println("Name:",name)
//删除键
if_,err:=conn.Do("DEL","name");err!=nil{
log.Fatal(err)
}
}
3. Cassandra
库:[gocql](https://godoc.org/github.com/gocql/gocql)1
packagemain
import(
"fmt"
"log"
"time"
"github.com/gocql/gocql"
)
funcmain(){
//建立连接
cluster:=gocql.NewCluster("localhost:9042")
session,err:=cluster.CreateSession()
iferr!=nil{
log.Fatal(err)
}
defersession.Close()
//创建表
iferr:=session.Query(`CREATETABLEusers(nametext,ageint,PRIMARYKEY(name))`).Exec();err!=nil{
log.Fatal(err)
}
//插入数据
iferr:=session.Query(`INSERTINTOusers(name,age)VALUES(?,?)`).Bind("Alice",30).Exec();err!=nil{
log.Fatal(err)
}
//查询数据
iter:=session.Query(`SELECTFROMusers`).Iter()
varnamestring
varageint
foriter.Scan(&name,&age){
fmt.Println("Name:",name,"Age:",age)
}
iferr:=iter.Close();err!=nil{
log.Fatal(err)
}
//更新数据
iferr:=session.Query(`UPDATEusersSETage=?WHEREname=?`).Bind(31,"Alice").Exec();err!=nil{
log.Fatal(err)
}
//删除数据
iferr:=session.Query(`DELETEFROMusersWHEREname=?`).Bind("Alice").Exec();err!=nil{
log.Fatal(err)
}
}
以上就是golang架构如何跟NoSQL数据库交互?的详细内容,大量请关注zvvq技术分享网其他类似文章!