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() }