106 lines
3.1 KiB
Go
106 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
|
|
"github.com/cloudflare/cloudflare-go"
|
|
)
|
|
|
|
func kvReadKey(api *cloudflare.API, key string) ([]byte, error) {
|
|
resp, err := api.GetWorkersKV(context.Background(), cloudflare.AccountIdentifier(accountID), cloudflare.GetWorkersKVParams{
|
|
NamespaceID: kvNamespaceID,
|
|
Key: key,
|
|
})
|
|
return resp, err
|
|
}
|
|
|
|
func kvWriteKey(api *cloudflare.API, key string, value any) (cloudflare.Response, error) {
|
|
var thevalue []byte
|
|
|
|
switch v := value.(type) {
|
|
case string:
|
|
thevalue = []byte(v)
|
|
case []byte:
|
|
thevalue = v
|
|
case int:
|
|
thevalue = []byte(fmt.Sprintf("%d", v))
|
|
case int64:
|
|
thevalue = []byte(fmt.Sprintf("%d", v))
|
|
default:
|
|
return cloudflare.Response{}, fmt.Errorf("unsupported type: %T", v)
|
|
}
|
|
resp, err := api.WriteWorkersKVEntry(context.Background(), cloudflare.AccountIdentifier(accountID), cloudflare.WriteWorkersKVEntryParams{
|
|
NamespaceID: kvNamespaceID,
|
|
Key: key,
|
|
Value: thevalue,
|
|
})
|
|
return resp, err
|
|
}
|
|
|
|
func kvDeleteKey(api *cloudflare.API, key string) (cloudflare.Response, error) {
|
|
resp, err := api.DeleteWorkersKVEntry(context.Background(), cloudflare.AccountIdentifier(accountID), cloudflare.DeleteWorkersKVEntryParams{
|
|
NamespaceID: kvNamespaceID,
|
|
Key: key,
|
|
})
|
|
return resp, err
|
|
}
|
|
|
|
func kvListKeys(api *cloudflare.API, prefix string, limit int) ([]cloudflare.StorageKey, error) {
|
|
resp, err := api.ListWorkersKVKeys(context.Background(), cloudflare.AccountIdentifier(accountID), cloudflare.ListWorkersKVsParams{
|
|
NamespaceID: kvNamespaceID,
|
|
Prefix: prefix,
|
|
Limit: limit,
|
|
})
|
|
return resp.Result, err
|
|
}
|
|
|
|
var apiToken string
|
|
var kvNamespaceID string
|
|
var accountID string
|
|
|
|
func main() {
|
|
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
|
|
defer cancel()
|
|
apiToken = "DATA REDACTED"
|
|
kvNamespaceID = "DATA REDACTED"
|
|
|
|
cf, err := cloudflare.NewWithAPIToken(apiToken)
|
|
if err != nil { log.Fatalf("创建 Cloudflare 客户端失败: %v", err) }
|
|
|
|
accounts, _, err := cf.Accounts(ctx, cloudflare.AccountsListParams{})
|
|
if err != nil { log.Fatalf("无法获取到账户列表: %v", err) }
|
|
accountID = accounts[0].ID
|
|
|
|
thekvKey := "from go"
|
|
thekvValue := "hello world"
|
|
|
|
_, err = kvWriteKey(cf, thekvKey, thekvValue)
|
|
if err != nil { log.Fatalf("往 [%s] 写入值 [%s] 失败: %v", thekvKey, thekvValue, err) }
|
|
fmt.Printf("往 [%s] 写入值 [%s] 成功\n", thekvKey, thekvValue)
|
|
|
|
read, err := kvReadKey(cf, thekvKey)
|
|
if err != nil { log.Fatalf("往 %s 读取值失败 %v", thekvKey, err) }
|
|
fmt.Printf("读取 [%s] 键值成功:[%s]\n", thekvKey, string(read))
|
|
|
|
allkey, err := kvListKeys(cf, "", 0)
|
|
if err != nil { log.Fatalf("获取所有键失败: %v", err) }
|
|
fmt.Println("所有键:")
|
|
for _, key := range allkey { fmt.Printf("[%s] ", key.Name) }
|
|
fmt.Println("\n")
|
|
|
|
_, err = kvDeleteKey(cf, thekvKey)
|
|
if err != nil { log.Fatalf("删除键 [%s] 失败: %v", thekvKey, err) }
|
|
fmt.Printf("删除键 [%s] 成功\n", thekvKey)
|
|
|
|
allkey, err = kvListKeys(cf, "", 0)
|
|
if err != nil { log.Fatalf("获取所有键失败: %v", err) }
|
|
fmt.Println("所有键:")
|
|
for _, key := range allkey { fmt.Printf("[%s] ", key.Name) }
|
|
fmt.Println()
|
|
|
|
}
|