Cloudflare KV
A Cloudflare KV storage driver using cloudflare/cloudflare-go.
Table of Contents
Signatures
func New(config ...Config) Storage
func NewFromConnection(api APIInterface, config ...Config) *Storage
func (s *Storage) Get(key string) ([]byte, error)
func (s *Storage) GetWithContext(ctx context.Context, key string) ([]byte, error)
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
func (s *Storage) SetWithContext(ctx context.Context, key string, val []byte, exp time.Duration) error
func (s *Storage) Delete(key string) error
func (s *Storage) DeleteWithContext(ctx context.Context, key string) error
func (s *Storage) Reset() error
func (s *Storage) ResetWithContext(ctx context.Context) error
func (s *Storage) Close() error
func (s *Storage) Conn() *cloudflare.API
Installation
go mod init github.com/<user>/<repo>
And then install the Cloudflare KV implementation:
go get github.com/gofiber/storage/cloudflarekv
Examples
Import the storage package.
import "github.com/gofiber/storage/cloudflarekv"
You can use the following methods to create storage. The Key must be an API Token generated with at least Account.Workers KV Storage permission. Check the Create API Token documentation to generate one.
// Initialize default config
store := cloudflarekv.New()
store := cloudflarekv.New(cloudflarekv.Config{
Key: "",
Email: "",
AccountID: "fiber",
NamespaceID: "fiber",
Reset: false,
})
Config
type Config struct {
// Cloudflare Auth Token
//
// Optional. Default is ""
Key string
// Cloudflare Email
//
// Optional. Default is ""
Email string
// Account id
//
// Optional. Default is "fiber"
AccountID string
// Namespace id
//
// Optional. Default is "fiber"
NamespaceID string
// Reset clears any existing keys in existing Table
//
// Optional. Default is false
Reset bool
}
Default Config
var ConfigDefault = Config{
Key: "",
Email: "",
AccountID: "fiber",
NamespaceID: "fiber",
Reset: false,
}
Using an Existing Cloudflare API Client
If your application already holds a Cloudflare API client, you can build the storage on it instead of creating a second one. Only the Email, AccountID, NamespaceID and Reset options are read; the credentials come from the client.
The client stays yours to manage: Close on a storage built this way is a no-op, so the rest of your application keeps working.
import (
"github.com/cloudflare/cloudflare-go"
"github.com/gofiber/storage/cloudflarekv"
)
func main() {
api, err := cloudflare.NewWithAPIToken("token")
if err != nil {
panic(err)
}
store := cloudflarekv.NewFromConnection(api, cloudflarekv.Config{
AccountID: "account-id",
NamespaceID: "namespace-id",
})
defer store.Close()
}