Go SDK¶
使用 Go SDK 连接 Catalog Service,读取和管理目录、数据库、表、卷、文件等资源。本页使用带截止时间的 context 列出当前身份可见的目录。
安装¶
Go SDK 当前要求 Go 1.24.3 或更高版本。在已有 Go module 中添加依赖:
go get github.com/matrixorigin/moi-go-sdk@latest
该模块当前没有稳定的语义化发布标签。生产项目应保留 go.mod 和 go.sum,并在升级前检查解析到的版本和自己的集成测试。
配置客户端¶
向部署方获取 Catalog Service 地址和 SDK Key,并设置为环境变量:
export MOI_BASE_URL="https://<catalog-service-host>"
export MOI_API_KEY="<sdk-api-key>"
MOI_BASE_URL 必须包含协议和主机名。RawClient 会规范化地址,并在请求中发送 moi-key。不要将 Genesis 访问令牌、浏览器 Cookie 或数据库密码当作 Catalog Service 的 SDK Key。
列出可见目录¶
创建 main.go:
package main
import (
"context"
"errors"
"fmt"
"log"
"os"
"time"
sdk "github.com/matrixorigin/moi-go-sdk"
)
func requiredEnv(name string) string {
value := os.Getenv(name)
if value == "" {
log.Fatalf("set %s before running this program", name)
}
return value
}
func main() {
client, err := sdk.NewRawClient(
requiredEnv("MOI_BASE_URL"),
requiredEnv("MOI_API_KEY"),
)
if err != nil {
log.Fatalf("create client: %v", err)
}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
response, err := client.ListCatalogs(ctx)
if err != nil {
var apiErr *sdk.APIError
var httpErr *sdk.HTTPError
switch {
case errors.As(err, &apiErr):
log.Fatalf("MOI API error: code=%s request_id=%s", apiErr.Code, apiErr.RequestID)
case errors.As(err, &httpErr):
log.Fatalf("HTTP error: status=%d", httpErr.StatusCode)
default:
log.Fatalf("list catalogs: %v", err)
}
}
for _, catalog := range response.List {
fmt.Printf("%s (id=%d)\n", catalog.CatalogName, catalog.CatalogID)
}
}
格式化并运行:
gofmt -w main.go
go run .
调用成功后会打印当前身份可见的目录。空列表不一定表示错误,也可能表示该身份尚未拥有可见目录。
选择客户端¶
包的模块路径是 github.com/matrixorigin/moi-go-sdk,示例使用 sdk 作为导入别名。RawClient 提供 Catalog Service 的资源调用;需要表权限角色、文件导入或 SQL 等组合操作时,可复用底层客户端创建 SDKClient:
highLevelClient := sdk.NewSDKClient(client)
使用前确认目标能力属于 Go SDK;不要将 Product SDK 的客户端或示例混入此处。
处理错误¶
服务返回业务错误时,SDK 返回 *sdk.APIError,其中的 Code 和 RequestID 可用于定位请求。服务返回非成功 HTTP 状态时,SDK 返回 *sdk.HTTPError。网络错误和 context 超时会作为其他 Go error 返回。
将 context 传给每次调用,并为需要及时返回的操作设置截止时间。调用超时只表示客户端停止等待,不表示服务端操作一定没有继续执行。写操作超时后,先查询目标资源或任务状态,再决定是否重试。
下一步¶
使用 Python SDK 在 Python 应用中调用 Catalog Service。
使用 Product SDK 管理 MOI 产品资源。