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/v0.5.10.
יצירת לקוח¶
client, err := homecloud.FromEnv()
ctx := context.Background()
_, err = client.SO.Upload(ctx, "docs", homecloud.UploadOptions{
FilePath: "./a.txt",
Key: "a.txt",
})
מפתחות מפורשים:
פרופיל ~/.homecloud/credentials:
מתוך 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_*).