Go语言实现简单的留言本

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

主Go代码:

package main

//Golang版本的留言本
//author:Xiong Chuan Liang
//date:2015-3-2

import (
	"fmt"
	"html/template"
	"io/ioutil"
	"net/http"
	"os"
)

func main() {
	http.Handle("/images/", http.FileServer(http.Dir("asset")))

	http.HandleFunc("/", listHandler)
	http.HandleFunc("/add", addHandler)
	http.ListenAndServe(":8055", nil)
}

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.Form.Get("email"),
			r.Form.Get("nickname"),
			r.Form.Get("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: [email protected]

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

时间: 2024-10-05 15:41:12

Go语言实现简单的留言本的相关文章

PHP语言基础简单整理

1.开始结束标记<? ... ?> 2.定义变量:$变量名 例: $str="锦清笋";不需要指明数据类型 3.输出语句:(1)echo "hello world!";---echo命令(2)print();输出语句,是函数,有返回值.输出成功返回1,失败返回0.(3) printf();格式化输出字符串.例:printf("%d,%f",12,12.3); (4)sprintf();格式化拼接字符串,不是输出语句,只能将字符串拼接.

Android技术10:Java与C语言之间简单数据的传递

由于C语言和Java语言之间很多类型不一致性,因此使用native时,需要数据类型转换.下面演示分别传递整型,字符串,整型数组,Java静态方法传递数据. 1.创建native方法 我们单独创建一个NativeClass类来存放native方法 1 package com.forsta.ndk; 2 3 public class NativeClass { 4 public native int add(int x,int y); 5 public native String showStrin

简单的留言板

制作一个简单的留言板,用户在输入框中输入内容,提交,然后内容显现在box里面 依然首先需要获取到输入框,提交按钮,box: 然后给提交按钮设置点击事件: 获取输入框的内容: 显示到box中 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #box{

Linux 用C语言实现简单的shell(2)

不知不觉两周没有发文了,因为“一万美金的福特奖学金答辩”,ACM比赛,网络论文阅读和网络大作业一大堆事把时间冲散了,所以先写一篇博文补上之前一坑. 之前发了一篇关于linux 用C语言实现简单shell的博文,当时因为刚刚接触linux,只是处理了: 1)外部命令 2)pwd,cd,exit内置命令 3)输入输出重定向 并且代码相比较而言是一步一步添加的,代码相对来讲比较丑QAQ,所以在学完管道之后,相信不得不重新写代码才能实现了. 相比较之前的版本我对代码进行了相关的修改: 1)对于shell

简单的留言板jquery

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head> <title></title> <meta http-equiv="content" content="text/html" char

二、Java语言的简单认识及Hello World示例

1. Java语言的简单认识 (1) Java有三个版本: a. JAVA SE (以前称J2SE):Standard Environment 标准版本: b. JAVA EE (以前称J2EE):Enterprise Environment 企业版: c. JAVA ME (以前称J2ME):Eicro Environment 微型版; (2) Java的安装目录 在前一讲中,提到安装目录中有两个文件夹,分别是jdk1.7.0_45和jre7.在"jdk1.7.0_45"文件夹的bi

c语言:简单飞机射击小游戏

c语言:简单飞机射击小游戏 使用c语言编写一个打飞机小游戏,使用键盘按键来进行游戏,操作方法是"a""d""w"或者"←""↑""→"来控制攻击.左.右,击中敌机可获得积分,被敌机撞中死亡一次,每次游戏有3次机会,机会用光则游戏结束,之后可选择是否重新开始游戏. 改进:增加了颜色函数,使得游戏看起来更加的舒适:增加了终止函数,使游戏在死亡三次后自动结束游戏,并且可以选择是否重新开始游戏:

go语言,简单分析和了解

Go 本地化 该指南也有其他语言版本: Brazilian Portuguese — Português do Brasil Catalan — Català Spanish — Español French - Français Hebrew — ???????? Japanese — 日本語 Korean — ??? Romanian - Român? Chinese — 普通话 Go Playground 这个指南构建在 Go Playground 之上,这是一个运行在 golang.or

安卓平台多语言的简单实现

这里,我们实现两个语言,简体中文和繁体中文. 在res目录下建议两个文件夹 values-zh-rCN values-zh-rTW 两个文件夹下都有一个strings.xml文件. 两个同名文件的字符串表,id是一样的,但是,内容的语言不一样. 比如<string name="quit_dlg_title">提示</string> <string name="quit_dlg_content">累了吧!休息一下吧!记得回来哦!&l