這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
有過python web開發經驗的朋友,相信對它的便利性肯定印象非常深刻。其實利用go語言對web網站進行開發也是非常容易的一件事情。之前我對web開發的經驗也為0,但是使用go語言之後,你可以在最短的時間內搭建一個網站。
為了學習的方便,大家可以直接從github上下載到本篇部落格談到的所有代碼。同時,文章中的代碼部分引用了《go語言編程》中的代碼內容,在此一併表示感謝。本次內容的地址在這,有興趣的同學可以下載看一下。
從目錄上看,代碼的內容非常簡單。picture.go包含了所有的互動代碼,list.html和upload.html則包含了使用到的模板檔案,而uploads目錄則儲存了所有上傳的image檔案。
首先看看picture.go代碼內容,
package mainimport "io"import "log"import "os"import "net/http"import "html/template"import "io/ioutil"const (UPLOAD_DIR = "./uploads")func uploadHandler (w http.ResponseWriter, r * http.Request) {if r.Method == "GET" {t, _ := template.ParseFiles("upload.html")t.Execute(w, nil)}else {f, h, _ := r.FormFile("image")filename := h.Filenamedefer f.Close()t, _ := os.Create(UPLOAD_DIR + "/" + filename)defer t.Close()_, err := io.Copy(t, f)if err != nil {return}http.Redirect(w, r, "view?id=" + filename, http.StatusFound)}}func viewHandler(w http.ResponseWriter, r* http.Request) {imageId := r.FormValue("id")imagePath := UPLOAD_DIR + "/" + imageIdw.Header().Set("Content-Type", "image")http.ServeFile(w, r, imagePath)}func listHandler(w http.ResponseWriter, r* http.Request) {fileInfoArr, _ := ioutil.ReadDir(UPLOAD_DIR)locals := make(map[string] interface{})images := []string{}for _, fileInfo := range fileInfoArr {images = append(images, fileInfo.Name())}locals["images"] = imagest, _ := template.ParseFiles("list.html")t.Execute(w, locals)}func main() {http.HandleFunc("/upload", uploadHandler)http.HandleFunc("/view", viewHandler)http.HandleFunc("/", listHandler)err := http.ListenAndServe(":9090", nil)if err != nil {log.Fatal("ListenAndServe: ", err.Error())}}
其實這個網站主要就3個網頁。一個是顯示所有圖片的索引,一個是圖片顯示,另外一個就是圖片上傳頁面。
下面看看,upload.html內容有哪些?
<!doctype html><html><head><meta charset = "utf-8"><tilte> Uploader </title></head><body><form method="post" action="/upload" enctype="multipart/form-data">Choose an image to upload: <input name="image" type="file" /><input type="submit" value="Upload" /></form></body></html>
有過前端開發經驗的朋友肯定一眼就看出來了,這其實就是個簡單的登入上傳頁面。那麼list.html又是什麼東西呢?
<!doctype html><html><head><meta charset="utf-8"><title> List </title></head><body><ol>{{range $.images}}<li><a href="/view?id={{.|urlquery}}"> {{.|html}} </a> </li>{{end}}</ol></body></html>
上面的網頁與其說是一個網頁,倒不如說是一個模板。因為所有的images內容其實都要從外界進行傳遞的,而這所有的內容才會構成一個真正的網頁,不知道我說清楚了沒有。
上面的網站簡單而清晰,有興趣的朋友可以好好看一看。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。