做了个简单的留言本用来练习http与template.

主Go代码:

package main//Golang版本的留言本
//author:Xiong Chuan Liang
//date:2015-3-2import ("fmt""html/template""io/ioutil""net/http""os""log"
)func main() {http.Handle("/images/", http.FileServer(http.Dir("asset")))http.HandleFunc("/", makeHandleFunc(listHandler))http.HandleFunc("/add", makeHandleFunc(addHandler))if err := http.ListenAndServe(":8055", nil);  err != nil {log.Fatal("ListenAndServe: ", err)}
}type HandleFuncType func(http.ResponseWriter, *http.Request)func makeHandleFunc(f HandleFuncType)(HandleFuncType){return func(w http.ResponseWriter,r *http.Request){defer func(){if x := recover(); x!= nil {log.Printf("[%v] panic: %v",r.RemoteAddr,x)}}()f(w,r)}
}func addHandler(w http.ResponseWriter, r *http.Request) {h, _ := template.ParseFiles("template/addinfo.tpl","template/header.tpl", "template/footer.tpl")h.ExecuteTemplate(w, "addinfo", nil)
}func listHandler(w http.ResponseWriter, r *http.Request) { if r.Method == "POST" {r.ParseForm()if len(r.Form["note"][0]) == 0 {infoHandler(w, r, `<b>提交失败!</b> <br/>留言不能为空! <br/> <a href="http://127.0.0.1:8055/add">返回</a>`)return}info := fmt.Sprintf("留言人:<a href='mailto:%s'>%s</a><br/>留言:%s<hr>",r.FormValue("email"),    //r.Form.Get("email")r.FormValue("nickname"),r.FormValue("note"))  writeInfo(info)}list, _ := readInfo()msg := map[string]template.HTML{"List": template.HTML(list)}h, _ := template.ParseFiles("template/guestbook.tpl","template/header.tpl", "template/footer.tpl")h.ExecuteTemplate(w, "guestbook", msg)
}func infoHandler(w http.ResponseWriter, r *http.Request, info string) {var base = `
<!DOCTYPE html>
<html><head><title>info</title><meta charset="UTF-8"></head><body>{{.}}</body>
</html>
`tmpl, err := template.New("提示信息").Parse(base)if err != nil {panic(err)}err = tmpl.Execute(w, template.HTML(info))if err != nil {panic(err)}
}const FILENAME = "Guestbook.log"func readInfo() (string, error) {body, err := ioutil.ReadFile(FILENAME)if err != nil {return "", err}return string(body), nil
}func writeInfo(str string) bool {f, err := os.OpenFile(FILENAME, os.O_RDWR|os.O_APPEND|os.O_CREATE, os.ModeType)if err != nil {panic(err)}defer f.Close()_, err = f.WriteString(str)if err != nil {panic(err)}return true
}

其guestbook.tpl:

{{define "guestbook"}}
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>留言本</title>
<style type="text/css">
body{margin:0;padding:0;background:#EAEAEA;}
</style>
</head>
<body>{{template "header"}}{{.List}}<center><a href="http://127.0.0.1:8055/add">增加留言</a></center>{{template "footer"}}</body>
</html>
{{end}}

实现的效果如下:

整个源码打包在此: 点击下载

MAIL: xcl_168@aliyun.com

BLOG: http://blog.csdn.net/xcl168

Go语言实现简单的留言本相关推荐

  1. 【CyberSecurityLearning 附】使用PHP语言搭建简单的论坛:注册功能实现+PHP个人中心设计+简单留言板

    使用PHP语言搭建简单的论坛 简单留言板 留言 个人中心           登录                验证码           注册                头像          ...

  2. 实用c语言函数源码,C语言编写简单朗读小工具(有源码)

    原标题:C语言编写简单朗读小工具(有源码) 最近不少人在后台留言说学C都是面对枯燥的控制台程序,能不能体现一下C语言的实际用途,今天我们就理论结合实践一把:C语言结合VBS脚本编写一个简单的朗读小工具 ...

  3. c语言案例朗读工具源码,C语言编写简单朗读小工具(有源码)

    原标题:C语言编写简单朗读小工具(有源码) 最近不少人在后台留言说学C都是面对枯燥的控制台程序,能不能体现一下C语言的实际用途,今天我们就理论结合实践一把:C语言结合VBS脚本编写一个简单的朗读小工具 ...

  4. php mysql 简单留言板_PHP+MySql实现一个简单的留言板

    跟着书学的,代码不是自己写的,但是都能理解,有时间自己去写个好看一点的吼吼吼-(不熟练花了一天的时间- 留言板是接触WEB开发的基础,写一个留言板需要知道前端的一些基础标签,对数据库有一个了解会基础S ...

  5. C语言实现简单的Web服务器

    C语言实现简单的Web服务器 一. 基础知识 二. 详细设计 三. 代码实现 四. 功能测试 五. 内容总结 个人博客:coonaa.cn [本文博客同步地址] 在之前的文章中使用C语言实现基于TCP ...

  6. c语言英汉互译编程,用C语言编辑简单英汉互译词典.doc

    疥详刁呆害獭荆羞哈沮蒜赫夜内淮牺彻蔼纤凤虹锥硝够唬古进淋牡振拘铅笺元扳与醒靳蹋销钡胶致石衙钦目妈而炸赚鹤邓穷窍瘴笼旬房殆查恨蠢煌沧祥斥瞩骤敌晤屏莲匆目穷妖暗屹码冬息摊挎傍啡坟范给羹哥皱做斋绥甭焕睫苍苫 ...

  7. Java语言实现简单FTP软件------源码放送(十三)

    Java语言实现简单FTP软件------>FTP协议分析(一) Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二) Java语言实现简单FTP软件----- ...

  8. perl语言入门第七版中文_python和c语言哪个简单

    python相较C语言入门要简单的多. C语言是一门面向过程.抽象化的通用程序设计语言,广泛应用于底层开发.C语言能以简易的方式编译.处理低级存储器. C语言是仅产生少量的机器语言以及不需要任何运行环 ...

  9. C语言学生成绩简单,C语言实现简单学生成绩管理系统.pdf

    C语言实现简单学生成绩管理系统 这篇文章主要为大家详细介绍了C语言实现简单学生成绩管理系统,具有 定的参考价值,感兴趣的小伙伴们可以 参考 下 本文实例为大家分享了C语言实现学生成绩管理系统的具体代码 ...

最新文章

  1. Python基础-安装
  2. 用SimpleDateFormat类设置时间格式
  3. python为什么说csv文件不存在_如果CSV文件不存在,则如何创建它,然后仅将其追加到Python中...
  4. uml和模式应用 pdf_「企业架构」架构知识库应用简介
  5. 取得程序运行的目录[360度]
  6. 查询php的扩展,php命令行查看扩展信息(示例代码)
  7. 分布式计算的程序设计,请各位帮忙看看有没有意见
  8. 关于win10连接不上ftp的解决方案
  9. CSS3魔法堂:说说Multi-column Layout
  10. Eps总结(1)——Eps入门级基本操作:新建工程、加载数据、新建对象、输入输出对象、基本操作
  11. html静态网站基于游戏网站设计与实现共计10个页面 (仿地下城与勇士游戏网页)
  12. WTP 线程池管理系统,修改配置后能够实时刷新
  13. 计算机多核启动原理,多核cpu工作原理 不进来看看?
  14. 系统非功能需求(质量属性)
  15. 我的周刊(第042期)
  16. 智能门锁触控中应用的电容式触摸芯片
  17. blender操作说明
  18. java获取给定日期当前周当前月当前季度的第一天和最后一天
  19. 戴尔台式计算机寿命,27年了 戴尔商用台式机如何保持活力?
  20. python简单实战项目:《冰与火之歌1-5》角色关系图谱构建

热门文章

  1. win10系统无法打开setup.exe
  2. 文字凸出效果html,Photoshop如何做文字凸出效果?
  3. 菜菜的Python学习日记 | Python类实验代码分享
  4. iMazing最新版本Win64位系统详细安装教程
  5. 无光驱照样装系统 教你用U盘安装XP/Vista
  6. AJDK 8.0.0 Release Notes
  7. 数据库之大数据分层理论 2021-11-14
  8. 【高阶】一个用户态的RCU实现liburcu
  9. 燃尽图、甘特图、鱼骨图
  10. 【数据库】Oracle中的字符型及处理方法