Skip to content

SDK ל-Go

גישה תכנותית ל-HomeCloud מ-Go 1.22+.

מודול: github.com/HomeCloudLab/homecloud-sdk/go
ADR: ADR-051

אותן יכולות HomeCloud כמו Python ו-Node.js. ה-API הציבורי אידיומטי ל-Go (context.Context, structs, errors.As) ורשאי להיראות אחרת. ההתנהגות שקולה אלא אם תיעדנו תיקון בטיחות (למשל Go לא מריטריא MQ.Send אוטומטית).

התקנה

go get github.com/HomeCloudLab/homecloud-sdk/go@v0.5.10

מודול בתת-תיקייה דורש גם תג go/v0.5.10.

יצירת לקוח

client, err := homecloud.FromEnv()
ctx := context.Background()
_, err = client.SO.Upload(ctx, "docs", homecloud.UploadOptions{
    FilePath: "./a.txt",
    Key:      "a.txt",
})

מפתחות מפורשים:

client, err := homecloud.FromCredentials("HCAK...", "secret")

פרופיל ~/.homecloud/credentials:

client, err := homecloud.FromProfile("ci")

מתוך Function (STS)

client, err := homecloud.FromSTS(homecloud.STS{
    AccessKeyID:     entry.AccessKeyID,
    SecretAccessKey: entry.SecretAccessKey,
    SessionToken:    entry.SessionToken,
    ResourceType:    "so",
    BaseURL:         entry.BaseURL,
}, homecloud.WithAccountID(accountID))

Object Storage

_, _ = client.SO.PutJSON(ctx, "docs", "a.json", map[string]any{"ok": true})
meta, _ := client.SO.HeadObject(ctx, "docs", "a.json")
_, _ = client.SO.Sync(ctx, "./dist", "so://my-website/", homecloud.SyncOptions{Delete: true})

תורים

_, _ = client.MQ.Send(ctx, "orders", map[string]any{"id": 1}, nil)
msgs, _ := client.MQ.Receive(ctx, "orders", homecloud.ReceiveOptions{MaxMessages: 10, WaitSeconds: 5})

Send לא מרוטרי על 502/503/504 (בניגוד ל-Python/Node) כדי לא לשכפל הודעות.

משימות ודיאגרמות

מישור ניהול — JWT משתמש (Login) או Access Key קשור למשתמש (SigV1).

items, _ := client.Tasks.Search(ctx, "cert @alice &ops due:overdue", homecloud.TaskListOptions{})
detail, _ := client.Tasks.Get(ctx, "TASK-12")
_, _ = client.Tasks.Create(ctx, "Rotate cert", homecloud.TaskCreateOptions{
    Type: "change", Priority: "p2", Assignees: []string{"alice"}, LabelNames: []string{"ops"},
})
_, _ = client.Tasks.AssignMe(ctx, "TASK-12", "in_progress")
_, _ = client.Tasks.Comment(ctx, "TASK-12", "Deployed to staging")

diagrams, _ := client.Diagrams.List(ctx)
doc, _ := client.Diagrams.Get(ctx, diagramID)
_, _ = client.Diagrams.Create(ctx, "Production plan", "Draft", nil)
_, _ = client.Diagrams.Update(ctx, diagramID, map[string]any{
    "name": "Prod", "document": doc["document"], "revision": doc["revision"],
})

שגיאות

var nf *homecloud.NotFoundError
if errors.As(err, &nf) {
    log.Println(nf.ResourceType, nf.Resource)
}

משתני סביבה

כמו ב-Python: HC_ACCESS_KEY_ID, HC_SECRET_ACCESS_KEY, HC_APEX, HC_PROFILE (וגם HOMECLOUD_*).

קשור