golang SurrealDB数据库驱动插件库surrealdb.go的使用
Golang SurrealDB数据库驱动插件库surrealdb.go的使用
官方Golang SurrealDB SDK
surrealdb.go是SurrealDB官方提供的Golang SDK,用于连接和操作SurrealDB数据库。
安装
go get github.com/surrealdb/surrealdb.go
快速开始示例
以下是一个完整的示例,展示如何连接SurrealDB、进行认证、创建数据、查询数据和删除数据:
package main
import (
"fmt"
surrealdb "github.com/surrealdb/surrealdb.go"
"github.com/surrealdb/surrealdb.go/pkg/models"
)
type Person struct {
ID *models.RecordID `json:"id,omitempty"`
Name string `json:"name"`
Surname string `json:"surname"`
Location models.GeometryPoint `json:"location"`
}
func main() {
// 连接到SurrealDB
db, err := surrealdb.New("ws://localhost:8000")
if err != nil {
panic(err)
}
// 设置命名空间和数据库
if err = db.Use("testNS", "testDB"); err != nil {
panic(err)
}
// 登录认证
authData := &surrealdb.Auth{
Username: "root", // 使用你的用户名
Password: "root", // 使用你的密码
}
token, err := db.SignIn(authData)
if err != nil {
panic(err)
}
// 检查token有效性
if err := db.Authenticate(token); err != nil {
panic(err)
}
// 稍后可以注销token
defer func(token string) {
if err := db.Invalidate(); err != nil {
panic(err)
}
}(token)
// 创建条目
person1, err := surrealdb.Create[Person](db, models.Table("persons"), map[interface{}]interface{}{
"Name": "John",
"Surname": "Doe",
"Location": models.NewGeometryPoint(-0.11, 22.00),
})
if err != nil {
panic(err)
}
fmt.Printf("使用map创建的人员: %+v\n", person1)
// 或者使用结构体
person2, err := surrealdb.Create[Person](db, models.Table("persons"), Person{
Name: "John",
Surname: "Doe",
Location: models.NewGeometryPoint(-0.11, 22.00),
})
if err != nil {
panic(err)
}
fmt.Printf("使用结构体创建的人员: %+v\n", person2)
// 通过Record ID获取条目
person, err := surrealdb.Select[Person, models.RecordID](db, *person1.ID)
if err != nil {
panic(err)
}
fmt.Printf("通过record id查询的人员: %+v\n", person)
// 或者获取整个表
persons, err := surrealdb.Select[[]Person, models.Table](db, models.Table("persons"))
if err != nil {
panic(err)
}
fmt.Printf("persons表中的所有数据: %+v\n", persons)
// 通过ID删除条目
if err = surrealdb.Delete[models.RecordID](db, *person2.ID); err != nil {
panic(err)
}
// 删除所有条目
if err = surrealdb.Delete[models.Table](db, models.Table("persons")); err != nil {
panic(err)
}
// 确认空表
persons, err = surrealdb.Select[[]Person](db, models.Table("persons"))
if err != nil {
panic(err)
}
fmt.Printf("没有查询到人员: %+v\n", persons)
}
运行示例的说明
- 在新文件夹中创建名为
main.go
的文件并粘贴上面的代码 - 运行
go mod init github.com/<github-username>/<project-name>
初始化go.mod
文件 - 运行
go mod tidy
下载surrealdb.go
依赖 - 运行
go run main.go
运行示例
连接引擎
有两种不同的连接引擎可用于连接到SurrealDB后端:Websocket或HTTP连接。
通过Websocket连接
db, err := surrealdb.New("ws://localhost:8000")
或安全连接:
db, err := surrealdb.New("wss://localhost:8000")
通过HTTP连接
db, err := surrealdb.New("http://localhost:8000")
或安全连接:
db, err := surrealdb.New("https://localhost:8000")
数据模型
这个包使用简洁二进制对象表示(CBOR)格式促进客户端和后端服务之间的通信。它简化了数据序列化和反序列化,同时确保高效和轻量级的通信。
CBOR类型 | Go表示 | 示例 |
---|---|---|
Null | nil |
var x interface{} = nil |
Boolean | bool |
true , false |
Array | []interface{} |
[]MyStruct{item1, item2} |
Date/Time | time.Time |
time.Now() |
UUID | surrealdb.UUID(string) |
surrealdb.UUID("123e4567-e89b-12d3-a456-426614174000") |
Integer | int , int64 |
42 , int64(-100000) |
Floating Point | float32 , float64 |
3.14 , float64(2.71828) |
Text String | string |
"Hello, World!" |
Map | map[interface{}]interface{} |
map[string]float64{"one": 1.0} |
Table name | surrealdb.Table(name) |
surrealdb.Table("users") |
Record ID | surrealdb.RecordID{Table: string, ID: interface{}} |
surrealdb.NewRecordID("customers", 1) |
辅助类型
surrealdb.O
对于像create、insert、update这样的方法,可以传递map而不是结构体值。例如:
person, err := surrealdb.Create[Person](db, models.Table("persons"), surrealdb.O{
"Name": "John",
"Surname": "Doe",
"Location": models.NewGeometryPoint(-0.11, 22.00),
})
surrealdb.Result[T]
这对于Send
函数很有用,其中T
是请求的预期响应类型。例如:
var res surrealdb.Result[[]Users]
err := db.Send(&res, "select", model.Table("users"))
if err != nil {
panic(err)
}
fmt.Printf("users: %+v\n", users.R)
贡献
你可以运行Makefile命令来运行和构建项目:
make build
make test
make lint
更多关于golang SurrealDB数据库驱动插件库surrealdb.go的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复