设计模式完了之后,应该实现具体的应用了。
设计模式还得没事就要复习。
web应用,学习的是网上的一本书。
《Web Development with Go》
package main import ( "encoding/json" "log" "net/http" "strconv" "time" "github.com/gorilla/mux" ) type Note struct { Title string `josn:"title"` Description string `json: "description"` CreatedOn time.Time `json:"createdon"` } var noteStore = make(map[string]Note) var id int = 0 func PostNoteHandler(w http.ResponseWriter, r *http.Request) { var note Note err := json.NewDecoder(r.Body).Decode(¬e) if err != nil { panic(err) } note.CreatedOn = time.Now() id++ k := strconv.Itoa(id) noteStore[k] = note j, err := json.Marshal(note) if err != nil { panic(err) } w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) w.Write(j) } func GetNoteHandler(w http.ResponseWriter, r *http.Request) { var notes []Note for _, v := range noteStore { notes = append(notes, v) } w.Header().Set("Content-Type", "application/json") j, err := json.Marshal(notes) if err != nil { panic(err) } w.WriteHeader(http.StatusOK) w.Write(j) } func PutNoteHandler(w http.ResponseWriter, r *http.Request) { var err error vars := mux.Vars(r) k := vars["id"] var noteToUpd Note err = json.NewDecoder(r.Body).Decode(¬eToUpd) if err != nil { panic(err) } if note, ok := noteStore[k]; ok { noteToUpd.CreatedOn = note.CreatedOn delete(noteStore, k) noteStore[k] = noteToUpd } else { log.Printf("Could not find key to update.") } w.WriteHeader(http.StatusNoContent) } func DeleteNoteHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) k := vars["id"] if _, ok := noteStore[k]; ok { delete(noteStore, k) } else { log.Printf("Could not find key to delete.") } w.WriteHeader(http.StatusNoContent) } func main() { r := mux.NewRouter().StrictSlash(false) r.HandleFunc("/api/notes", GetNoteHandler).Methods("GET") r.HandleFunc("/api/notes", PostNoteHandler).Methods("POST") r.HandleFunc("/api/notes/{id}", PutNoteHandler).Methods("PUT") r.HandleFunc("/api/notes/{id}", DeleteNoteHandler).Methods("DELETE") server := &http.Server{ Addr: ":8080", Handler: r, } log.Println("Listening...") server.ListenAndServe() }
=========================================================================