Database server, to compile and run, run ./run.sh
cache.go has the cache store. server.go creates the server and serves request. main.go is the driver file.
package main | |
import ( | |
"log" | |
) | |
var store = make(map[string]string) | |
func setValue(key, value string) { | |
store[key] = value | |
log.Print("setValue: Key %s, Value %s:", key, value) | |
} | |
func getValue(key string) string { | |
value := store[key] | |
log.Print("getValue: Key %s, Value %s:", key, value) | |
return value | |
} |
package main | |
import "log" | |
const port = 4000 | |
func main() { | |
setRouter() | |
err := setListeningPort(PORT) | |
if err != nil { | |
log.Fatal("Oops there was an error: ", err) | |
} | |
} |
#! | |
go build main.go server.go cache.go | |
./main |
package main | |
import ( | |
"bytes" | |
"fmt" | |
"log" | |
"net/http" | |
"strconv" | |
"strings" | |
) | |
func setRouter() { | |
http.HandleFunc("/", listen) | |
} | |
func getPortString(port int) string { | |
var portBuffer bytes.Buffer | |
portBuffer.WriteString(":") | |
portBuffer.WriteString(strconv.Itoa(port)) | |
return portBuffer.String() | |
} | |
func setListeningPort(port int) error { | |
err := http.ListenAndServe(getPortString(port), nil) | |
return err | |
} | |
func requestDecoder(request http.Request) (string, string) { | |
for k, v := range request.Form { | |
return k, strings.Join(v, "") | |
} | |
return "", "" | |
} | |
func requestSelector(response http.ResponseWriter, request *http.Request) { | |
key, value := requestDecoder(*request) | |
if len(key) == 0 || len(value) == 0 { | |
fmt.Fprintf(response, "Request is ill-formed") | |
} else if request.URL.Path == "/set" { | |
setValue(key, value) | |
fmt.Fprintf(response, "Stored data in cache") | |
} else if request.URL.Path == "/get" { | |
storedValue := getValue(value) | |
if len(storedValue) == 0 { | |
fmt.Fprintf(response, "Key does not exist in cache") | |
} | |
log.Print("Response %s:", storedValue) | |
fmt.Fprintf(response, storedValue) | |
} else { | |
log.Print("Request not supported") | |
fmt.Fprintf(response, "Request not supported") | |
} | |
} | |
func listen(response http.ResponseWriter, request *http.Request) { | |
log.Print("Request: %T", request) | |
request.ParseForm() | |
requestSelector(response, request) | |
} |