deta-go is the official Deta SDK for Go.
Use go get
to retreive the SDK to add it to your GOPATH
workspace, or project's Go module dependencies.
go get github.com/deta/deta-go
To update the SDK use go get -u
to retrieve the latest version of the SDK.
go get -u github.com/deta/deta-go
If you are using Go modules, your go get
will default to the latest tagged release version of the SDK. To get a specific release version of the SDK use @<tag>
in your go get
command.
go get github.com/deta/deta-go@v1.0.0
To get the latest SDK repository change use @latest
.
go get github.com/aws/deta-go@latest
The SDK constitutes of two main components, the core package and service packages.
-
deta
: The core SDK package, provides shared functionalities to the service packages. All theerrors
are also exported from this package. -
service
: The service packages, the services supported by the SDK.base
: Deta Base service packagedrive
: Deta Drive service package
When using the SDK you will require you project key. The project key can be provided explicitly or is taken from the environement variable DETA_PROJECT_KEY
.
By default, the SDK looks for the environment variable DETA_PROJECT_KEY
for the project key
// Create a new Deta instance taking the project key from the environment by default
d, err := deta.New()
if err != nil {
fmt.Fprintf(os.Stderr, "failed to create new deta instance: %v\n", err)
}
You can use the WithProjectKey
option when creating a Deta
instance to provide the project key explicitly.
// Create a new Deta instance with explicit project key
d, err := deta.New(deta.WithProjectKey("project_key"))
if err != nil {
fmt.Fprintf(os.Stderr, "failed to create new deta instance: %v\n", err)
}
The following is a simple Put
operation example.
package main
import (
"fmt"
"os"
"time"
"github.com/deta/deta-go/deta"
"github.com/deta/deta-go/service/base"
)
// User an example user struct
type User struct {
// json struct tag 'key' used to denote the key
Key string `json:"key"`
Username string `json:"username"`
Active bool `json:"active"`
Age int `json:"age"`
Likes []string `json:"likes"`
// json struct tag '__expires' for expiration timestamp
// 'omitempty' to prevent default 0 value
Expires int64 `json:"__expires,omitempty"`
}
func main() {
// Create a new Deta instance with a project key
d, err := deta.New(deta.WithProjectKey("project_key"))
if err != nil {
fmt.Fprintf(os.Stderr, "failed to create new Deta instance: %v\n", err)
os.Exit(1)
}
// Create a new Base instance called "users", provide the previously created Deta instance
users, err := base.New(d, "users")
if err != nil {
fmt.Fprintf(os.Stderr, "failed to create new Base instance: %v\n", err)
os.Exit(1)
}
// Put "jimmy" to the "users" Base
key, err := users.Put(&User{
Key: "jimmy_neutron",
Username: "jimmy",
Active: true,
Age: 20,
Likes: []string{"science"},
})
if err != nil {
fmt.Fprintf(os.Stderr, "failed to put item: %v\n", err)
os.Exit(1)
}
fmt.Printf("successfully put item with key %s\n", key)
// A map can also be used
jimmy := map[string]interface{}{
"key": "jimmy_neutron",
"username": "jimmy",
"active": true,
"age": 20,
"likes": []string{"science"},
}
key, err = users.Put(jimmy)
if err != nil {
fmt.Fprintf(os.Stderr, "failed to put item: %v\n", err)
os.Exit(1)
}
fmt.Printf("successfully put item with key: %s\n", key)
// Put with expiration timestamp
eu := &User{
Key: "tmp_user_key",
Username: "test_user",
Expires: time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC).Unix(),
}
key, err = users.Put(eu)
if err != nil {
fmt.Fprintf(os.Stderr, "failed to put item: %v\n", err)
os.Exit(1)
}
fmt.Printf("successfully put expiring item with key: %s\n", key)
// Put map with expiration timestamp
tmp := map[string]interface{}{
"key": "tmp_user_key",
"username": "test_user",
// use `__expires` as the key for expiration timestamp
"__expires": time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC).Unix(),
}
key, err = users.Put(tmp)
if err != nil {
fmt.Fprintf(os.Stderr, "failed to put item: %v\n", err)
os.Exit(1)
}
fmt.Printf("successfully put expiring item with key: %s\n", key)
}
More examples and complete documentation on https://docs.deta.sh/docs/base/sdk
The following is a simple Put
operation example.
package main
import (
"bufio"
"fmt"
"os"
"github.com/deta/deta-go/deta"
"github.com/deta/deta-go/service/drive"
)
func main() {
// Create a new Deta instance with a project key
d, err := deta.New(deta.WithProjectKey("project_key"))
if err != nil {
fmt.Fprintf(os.Stderr, "failed to create new Deta instance:%v\n", \n)
os.Exit(1)
}
// Create a new Drive instance called "drawings", provide the previously created Deta instance
drawings, err := drive.New(d, "drawings")
if err != nil {
fmt.Fprintf(os.Stderr, "failed to create new Drive instance: %v\n", err)
os.Exit(1)
}
// Open local file "art.svg"
file, err := os.Open("./art.svg")
if err != nil {
fmt.Fprintf(os.Stderr, "failed to open file: %v\n", err)
os.Exit(1)
}
defer file.Close()
// Put "art.svg" to "drawings"
name, err := drawings.Put(&drive.PutInput{
Name: "art.svg",
Body: bufio.NewReader(file),
ContentType: "image/svg+xml",
})
if err != nil {
fmt.Fprintf(os.Stderr, "failed to put file: %v\n", err)
os.Exit(1)
}
fmt.Printf("successfully put file %s", name)
}
More examples and complete documentation on https://docs.deta.sh/docs/drive/sdk/