package blog import ( "os" "io" "fmt" "net/http" "github.com/gorilla/mux" ) type FileReader struct{} type SlugReader interface { Read(slug string) (string, error) } func (fsr FileReader) Read(slug string) (string, error) { f, err := os.Open(slug + ".md") if err != nil { return "", err } defer f.Close() b, err := io.ReadAll(f) if err != nil { return "", err } return string(b), nil } func PostHandler(sl SlugReader) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) // Correctly retrieve vars from the request slug := vars["slug"] // Access the slug postMarkdown, err := sl.Read(slug) if err != nil { http.Error(w, "Post not found", http.StatusNotFound) return } fmt.Fprint(w, postMarkdown) } }