PocketBase是一个开源的Go后端,包含以下特性:
有关文档和示例,请访问https://pocketbase.io/docs。
[!警告] 请注意,PocketBase仍在积极开发中, 因此在达到v1.0.0版本之前不能保证完全向后兼容。
与API交互最简单的方式是使用官方SDK客户端之一:
您可以从发布页面下载适用于您平台的预构建可执行文件。
下载后,解压缩文件并在解压目录中运行./pocketbase serve
。
预构建的可执行文件基于examples/base/main.go
文件,默认启用了JS VM插件,允许使用JavaScript扩展PocketBase(有关详细信息,请参阅使用JavaScript扩展)。
PocketBase作为常规Go库包分发,允许您构建自己的自定义应用程序特定业务逻辑,同时最终得到一个可移植的单一可执行文件。
以下是一个最小示例:
安装Go 1.21+(如果尚未安装)
创建一个新的项目目录,并在其中创建以下main.go
文件:
package main import ( "log" "net/http" "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/core" ) func main() { app := pocketbase.New() app.OnBeforeServe().Add(func(e *core.ServeEvent) error { // 在应用路由器(echo)中添加新的"GET /hello"路由 e.Router.AddRoute(echo.Route{ Method: http.MethodGet, Path: "/hello", Handler: func(c echo.Context) error { return c.String(200, "Hello world!") }, Middlewares: []echo.MiddlewareFunc{ apis.ActivityLogger(app), }, }) return nil }) if err := app.Start(); err != nil { log.Fatal(err) } }
要初始化依赖项,运行go mod init myapp && go mod tidy
。
要启动应用程序,运行go run main.go serve
。
要构建静态链接的可执行文件,可以运行CGO_ENABLED=0 go build
,然后使用./myapp serve
启动创建的可执行文件。
[!注意] PocketBase嵌入了SQLite,但不需要CGO。
如果启用CGO(即
CGO_ENABLED=1
),它将使用mattn/go-sqlite3驱动程序,否则使用modernc.org/sqlite。 只有在真正需要以牺牲交叉编译复杂性为代价来提高读/写查询性能时才启用CGO。
有关更多详细信息,请参阅使用Go扩展。
要构建最小的独立可执行文件(类似于发布页面中的预构建文件),您可以在examples/base
目录中简单地运行go build
:
examples/base
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build
(_https://go.dev/doc/install/source#environment_)./base serve
启动创建的可执行文件。请注意,纯Go SQLite驱动程序目前支持的构建目标是:
darwin amd64
darwin arm64
freebsd amd64
freebsd arm64
linux 386
linux amd64
linux arm
linux arm64
linux ppc64le
linux riscv64
linux s390x
windows amd64
windows arm64
PocketBase包含单元测试和集成测试的混合。
要运行它们,使用标准的go test
命令:
go test ./...
另请查看测试指南,了解如何编写自己的自定义应用程序测试。