Skip to main content

Go

Connect to Blink Store from Go using the standard library — no external modules needed.


Prerequisites


Interactive client

A complete REPL client. Save as client.go and run it.

package main

import (
"bufio"
"encoding/base64"
"fmt"
"net"
"os"
"strings"
)

func main() {
host := "127.0.0.1"
port := "8765"
if len(os.Args) > 1 { host = os.Args[1] }
if len(os.Args) > 2 { port = os.Args[2] }

addr := net.JoinHostPort(host, port)
conn, err := net.Dial("tcp", addr)
if err != nil {
fmt.Fprintf(os.Stderr, "Cannot connect to %s: %v\n", addr, err)
os.Exit(1)
}
defer conn.Close()

fmt.Printf("Connected to %s\n", addr)
fmt.Println("Commands: SET <key> <value> | GET <key> | DELETE <key> | USAGE | QUIT")
fmt.Println()

reader := bufio.NewReader(conn)
scanner := bufio.NewScanner(os.Stdin)
fmt.Print("> ")

for scanner.Scan() {
line := strings.TrimSpace(scanner.Text())
if line == "" {
fmt.Print("> ")
continue
}
if strings.EqualFold(line, "QUIT") {
break
}

fmt.Fprintf(conn, "%s\n", line)
resp, err := reader.ReadString('\n')
if err != nil {
fmt.Fprintf(os.Stderr, "Read error: %v\n", err)
break
}
resp = strings.TrimSpace(resp)

if strings.HasPrefix(resp, "VALUE ") {
decoded, err := base64.StdEncoding.DecodeString(resp[6:])
if err == nil {
fmt.Println(string(decoded))
} else {
fmt.Println(resp)
}
} else {
fmt.Println(resp)
}
fmt.Print("> ")
}
}

Run:

go run client.go
Connected to 127.0.0.1:8765
Commands: SET <key> <value> | GET <key> | DELETE <key> | USAGE | QUIT

> SET lang go
OK
> GET lang
go
> QUIT

One-off commands

A reusable function for sending a single command:

func blink(command, addr string) (string, error) {
conn, err := net.Dial("tcp", addr)
if err != nil { return "", err }
defer conn.Close()

fmt.Fprintf(conn, "%s\n", command)
resp, err := bufio.NewReader(conn).ReadString('\n')
if err != nil { return "", err }
resp = strings.TrimSpace(resp)

if strings.HasPrefix(resp, "VALUE ") {
decoded, err := base64.StdEncoding.DecodeString(resp[6:])
if err != nil { return resp, nil }
return string(decoded), nil
}
return resp, nil
}

Key concepts

ConceptGo API
TCP connectionnet.Dial("tcp", addr)
Line readingbufio.NewReader(conn).ReadString('\n')
Base64 decodebase64.StdEncoding.DecodeString(payload)
Error handlingCheck err on every call