惊人go语言(image网站开发)
【 声明:版权全部,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
有过python web开发经验的朋友。相信对它的便利性肯定印象很深刻。
事实上利用go语言对web站点进行开发也是很easy的一件事情。
之前我对web开发的经验也为0。可是使用go语言之后,你能够在最短的时间内搭建一个站点。
为了学习的方便。大家能够直接从github上下载到本篇博客谈到的全部代码。同一时候,文章中的代码部分引用了《go语言编程》中的代码内容,在此一并表示感谢。本次内容的地址在这。有兴趣的同学能够下载看一下。
从文件夹上看,代码的内容很简单。picture.go包括了全部的交互代码,list.html和upload.html则包括了使用到的模板文件。而uploads文件夹则保存了全部上传的image文件。
首先看看picture.go代码内容,
package main import "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.Filename
defer 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 + "/" + imageId
w.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"] = images t, _ := 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内容事实上都要从外界进行传递的,而这全部的内容才会构成一个真正的网页。不知道我说清晰了没有。
上面的站点简单而清晰,有兴趣的朋友能够好好看一看。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
惊人go语言(image网站开发)的更多相关文章
- CGI、ASP、PHP、JSP、 ASP.NET网站开发语言比较
一.主流网站开发语言的简介及优缺点. 现在主流的网站开发语言主要包括cgi.asp.php.asp.net.jsp等. HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持. (一) ...
- MVC5 网站开发实践 概述
目录 MVC5 网站开发实践 概述 MVC5 网站开发实践 1.建立项目 MVC5 网站开发实践 2.后台管理 MVC5 网站开发实践 2.1.管理员登陆 MVC5 网站开发实践 2.2.管理 ...
- JSP网站开发基础总结《二》
有了上一篇的学习,我相信大家对于JSP一定有了一定的认识,从今天开始我们真正开启JSP模式,如果你有HTML的基础,那学起JSP来也就方便了很多了,首先JSP做为网站开发语言,它与HTML有很多相似的 ...
- JSP网站开发基础总结《一》
经过JAVASE的学习相信大家对JAVA已经不再陌生,那么JAVA都可以干什么呢?做算法.应用程序.网站开发都可以,从今天开始为大家奉上JAVAEE之JSP动态网站开发基础总结. 既然是动态网站开发, ...
- Mysql 与 php动态网站开发 入门教程
这个系列的教程由表单开始写,因为表单可以把数据库和web 之间的交互表现得很明显.提交表单 ,数据库记录注册信息. 本教程属于基础教程.大神请略过. 对于php和mysql之间的稳固性很 ...
- .net网站开发(设计):1.什么是MVC模式
好吧我知道,应该很少人一开始学网站开发就从MVC开始,但如果你已经理解了三层架构之类的,那直接尝试强大的微软MVC网站开发模式也是挺不错的. 但其实我们学校有个实验室,那些干进去的就算是大一的学生,也 ...
- 【PHP】Sublime下PHP网站开发指南
Sublime下PHP网站开发指南 作者:白宁超 2017年3月16日11:03:17 摘要:随着单位开发项目的需求,关于政务办公多年来一直使用php开发管理平台.笔者早年asp开发经验算是有些帮助, ...
- 基于Struts2+Hibernate的朋友圈留言网站开发的质量属性
在课堂上我们了解了质量高于功能,质量属性是指影响质量的相关因素,是对质量的描述.现在我们对基于SSH的交友网站开发的质量属性可以从以下几个方向进行分析: (1)可用性: 当错误发生时,使用可用性战术进 ...
- HTML+CSS网站开发兵书
<HTML+CSS网站开发兵书> 基本信息 作者: 高洪涛 丛书名: 程序员藏经阁 出版社:电子工业出版社 ISBN:9787121212369 上架时间:2013-8-26 出版日期:2 ...
- 网站开发只需数小时?Meteor 说这才是未来
原文: http://www.geekpark.net/topics/211573/ 那个想要挑战过去数十年沿用至今的网站开发模式的新势力来了. Meteor 是从 YC 孵化而出的现代网站开发平台, ...
随机推荐
- .NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper
.NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper 參考演示样例代码,例如以下所看到的: /// <summary> /// MySql ...
- 安装zookeeper集群
zookeeper集群的安装 顾名思义zookeeper就是动物园管理员,他是用来管hadoop(大象).Hive(蜜蜂).pig(小猪)的管理员, Apache Hbase和 Apache So ...
- 冒泡排序算法 C++和PHP达到
冒泡排序是小元素向前或向后的大要素.两个相邻元件之间的比较结果更.交换也这两个元件之间发生.它是最慢的排序算法. 效率最低的算法. 时间复杂度: 它是最差时间复杂度为:O(n^2),冒泡排序最好的时间 ...
- 重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容器控件: Border, Viewbox, Popup
原文:重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter ...
- Java获得正则表达式
t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,wid ...
- 记View跨界平局
<?xml version="1.0" encoding="utf-8"? > <RelativeLayout xmlns:android=& ...
- Redis c/c++, java client连接
Redis 介绍 redis这个想必大家都了解,关于redis的安装參考这里,redis使用文档參见这里,英文文档. Redis Cclient的用法 Redis的cclient Hiredis使用比 ...
- Asp.net MVC4 +EF6开发
Asp.net MVC4 +EF6开发的个人网站源码和介绍(仅供新手学习) 本项目是我去年利用业余时间开发的,采用的是asp.net mvc 4 +EF6+三层架构,适合新手进行学习,高手就没有什么价 ...
- virus.win32.parite.H查杀病毒的方法
virus.win32.parite.H病毒的查杀方法 昨天电脑中了virus.win32.parite.H病毒,搞了2个多小时最终搞定了.以下记录下我的解决方法. 第一步:下载Win32.Parit ...
- 使用bootbox.js(二级务必提交书面和数字到数字中国)
页面文件 <#-- 页头 --> <#assign currNav = "deposit"> <#assign title="网校充值&qu ...