神奇的go语言(image网站开发)
2022-10-24 15:56:58
216
{{single.collect_count}}


【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱: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内容其实都要从外界进行传递的,而这所有的内容才会构成一个真正的网页,不知道我说清楚了没有。


    上面的网站简单而清晰,有兴趣的朋友可以好好看一看。

    




回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}