文档章节

go web 例子

昏鸦
 昏鸦
发布于 2014/02/20 19:31
字数 754
阅读 130
收藏 2
点赞 0
评论 0

项目结构:


main.go:

package main


import (

"fmt"

"database/sql"

//_ "github.com/go-sql-driver/mysql"

"io"

"log"

"net/http"

//"io/ioutil"

"html/template"

"dao"

"strconv"

//"models"

)



func helloHandler(w http.ResponseWriter, r *http.Request) {

io.WriteString(w, "Hello, world!!!!")

}

func renderHtml(w http.ResponseWriter, tmpl string, locals map[string]interface{})(err error){

t, err := template.ParseFiles(tmpl + ".html")

if err != nil {

return err

}

err = t.Execute(w, locals)

return err

}

func  listHandler(w http.ResponseWriter, r *http.Request){


locals := make(map[string]interface{})

users := dao.LoadInfo(db)

// users := []Info{}

//users = append(users, Info{121,"12313", 1})


locals["users"] = users

t, _ := template.ParseFiles( "list.html")

t.Execute(w, locals)

//locals := make(map[string]interface{})

//locals["infos"] = infos


//if err := renderHtml(w, "list", locals); err != nil {

// http.Error(w, err.Error(),

// http.StatusInternalServerError)

// }

// log.Print(" login index ")

// t,err := template.ParseFiles("list.html")

// if err != nil{

// http.Error(w,err.Error(),http.StatusInternalServerError)

// return

// }

// t.Execute(w,nil)

//return 

}

func  delHandler(w http.ResponseWriter, r *http.Request){

id := r.FormValue("id")

fmt.Println(id)

idint, _ := strconv.Atoi(id)

dao.DelInfo(db,idint)

//if err != nil{

// http.Error(w,err.Error(),http.StatusInternalServerError)

// return

//}

//t.Execute(w,nil)

http.Redirect(w,r,"/list",http.StatusFound)

//return 

}

func  addview(w http.ResponseWriter, r *http.Request){

t,err := template.ParseFiles("add.html")

if err != nil{

http.Error(w,err.Error(),http.StatusInternalServerError)

return

}

t.Execute(w,nil)



}

func  addHandler(w http.ResponseWriter, r *http.Request){

name := r.FormValue("name")

itype := r.FormValue("itype")

fmt.Println(name)

fmt.Println(itype)

itypeint, _ := strconv.Atoi(itype)


dao.AddInfo(db,name,itypeint)

//idint, _ := strconv.Atoi(id)

//dao.DelInfo(db,idint)

//if err != nil{

// http.Error(w,err.Error(),http.StatusInternalServerError)

// return

//}

//t.Execute(w,nil)

http.Redirect(w,r,"/list",http.StatusFound)

//return 

}


func  indexHandler(w http.ResponseWriter, r *http.Request){

log.Print(" login index ")

t,err := template.ParseFiles("index.html")

if err != nil{

http.Error(w,err.Error(),http.StatusInternalServerError)

return

}

t.Execute(w,nil)

return 

}


var db *sql.DB

func main() {


//user:= models.User{1,"212"}

// var info  dao.Info

// info.ID = 121

// info.Name = "13221"

// info.Itype = 1


        //p:= dao.Info{1,"nn" ,23}

db=dao.Initdb()

        log.Print("start a web sevice!")

http.HandleFunc("/", indexHandler)

http.HandleFunc("/hello", helloHandler)

http.HandleFunc("/list", listHandler)

http.HandleFunc("/del", delHandler)

http.HandleFunc("/add", addHandler)

http.HandleFunc("/addview", addview)

err := http.ListenAndServe(":8080", nil)

if err != nil {

log.Fatal("ListenAndServe: ", err.Error())

}

}

dao.go:

package dao


import (

"fmt"

"database/sql"

_ "github.com/go-sql-driver/mysql"

"models"

)

type Info struct{

ID int

Name string

Itype int


}

func Initdb()(*sql.DB ){


fmt.Println("init  db .....")

db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8")

if err != nil {

fmt.Println("db is error")

}


rows,err :=  db.Query("show tables")

for rows.Next(){


}

return db

}

func DelInfo(db *sql.DB,id int){

stmt,_:= db.Prepare("delete from msg_info where id =?")

stmt.Exec(id)



}


func AddInfo(db *sql.DB,name string, itype int){

     stmt,_:= db.Prepare("insert msg_info(name,type) values(?,?) ")

     stmt.Exec(name,itype)


}

func LoadInfo(db *sql.DB)([]models.Info){


rows,_ := db.Query("select * from msg_info")

results := []models.Info{}

for rows.Next(){

var ID  int

var Name string

var Itype int

_ = rows.Scan(&ID,&Name,&Itype)

p:= models.Info{ID,Name ,Itype}

results=append(results,p)



}


return results

}

models.go:

package models


type User struct{


ID int

Name string


}


type Info struct{


ID int

Name string

Itype int


}

list.html:

<html>

<head>

<title>list</title>

</head>


<style type="text/css">

table{border-collapse:collapse;border-spacing:0;border-left:1px solid #888;border-top:1px solid #888;background:#efefef;}

th,td{border-right:1px solid #888;border-bottom:1px solid #888;padding:5px 15px;}

th{font-weight:bold;background:#ccc;}


</style>


<body>

<br><br>

<center><div style="font-size:30px">message list</div></center>

<br><br><br><br>

<div style="text-align:center"><a href="addview">add</a></ol>

</div>

<br>

<center>

<table width="70%" >

<tr>

 <th>id</th>

 <th>name</th>

 <th>类型</th>

 <th>删除</th>

 </tr>

{{ range $.users}}


<tr>

<td>{{.ID}}</td>

<td>{{.Name}}</td>

<td>{{.Itype}}</td>

<td><a href="/del?id={{.ID}}">删除</a></td>

 </tr>

 {{end}}

</table>

</center>


 </body>

</html>

add.list:

<html>

    <head>

</head>


<body>


<br><br><br><br>

<center>

<div>add info<div>

<br><br><br>

<div style="text-align:center"><a href="list">list</a></div>

<br>

<form  action="add" method="post" >

<div style="border:1px solid red; padding:10px;width:400px;padding-left: 200px;text-align:left">

<br><br>

<label for="name">name:</label>

            <input type="text" name="name" />

            <br><br>

            <label for="itype">type:</label>

            <select name="itype">

  <option value ="1">Volvo</option>

  <option value ="2">Saab</option>

  <option value="2">Opel</option>

  <option value="4">Audi</option>

</select>

<br><br>

<input type="submit" value="ok" style="width:100px;height:30px;" />

<br><br><br><br><br><br><br><br>

</div>

</form>

</center>

</body>

</html>

index.html:

<html>

<head>

 <title>Welcome</title>

 </head>

 <body bgcolor="#D1EEEE">

<br><br><br><br><br><br><br><br><br><br><br>

<center><div style="font-size:200px">

Welcome

</div>

</center>


<br><br>

<div style="text-align:center"><a href="addview">add</a></ol>

<div style="text-align:center"><a href="list">list</a></ol>

 </body>

</html>


© 著作权归作者所有

共有 人打赏支持
昏鸦
粉丝 6
博文 155
码字总数 58873
作品 0
程序员
shiro过滤器过滤属性含义

===============其权限过滤器及配置释义======================= anon org.apache.shiro.web.filter.authc.AnonymousFilter authc org.apache.shiro.web.filter.authc.FormAuthenticationFi......

ada_young ⋅ 2016/04/21 ⋅ 0

shiro内置过滤器研究

anon org.apache.shiro.web.filter.authc.AnonymousFilter authc org.apache.shiro.web.filter.authc.FormAuthenticationFilter authcBasic perms port rest roles ssl org.apache.shiro.web......

zh119893 ⋅ 2014/06/28 ⋅ 0

Shiro 默认过滤器

anon org.apache.shiro.web.filter.authc.AnonymousFilter authc org.apache.shiro.web.filter.authc.FormAuthenticationFilter authcBasic org.apache.shiro.web.filter.authc.BasicHttpAut......

慕容若冰 ⋅ 2016/12/22 ⋅ 0

Spring整合Shiro

securityManager:这个属性是必须的。 loginUrl :没有登录的用户请求需要登录的页面时自动跳转到登录页面,不是必须的属性,不输入地址的话会自动寻找项目web项目的根目录下的”/login.jsp”...

_Roger_ ⋅ 2015/12/15 ⋅ 0

Nginx负载均衡的4种方案配置

1、轮询 轮询即Round Robin,根据Nginx配置文件中的顺序,依次把客户端的Web请求分发到不同的后端服务器。 配置的例子如下: 2、最少连接 上面只有1个DNS入口被插入到upstream节,即samplea...

孟飞阳 ⋅ 2016/08/06 ⋅ 0

基于HTML5的WebGL结合Box2DJS物理引擎应用

上篇我们基于HT for Web呈现了A* Search Algorithm的3D寻路效果,这篇我们将采用HT for Web 3D来呈现Box2DJS物理引擎的碰撞效果,同上篇其实Box2DJS只是二维的平面碰撞物理引擎,但同样通过3...

xhload3d ⋅ 2015/12/08 ⋅ 0

基于HT for Web 3D呈现Box2DJS物理引擎

上篇我们基于HT for Web呈现了A* Search Algorithm的3D寻路效果,这篇我们将采用HT for Web 3D来呈现Box2DJS物理引擎的碰撞效果,同上篇其实Box2DJS只是二维的平面碰撞物理引擎,但同样通过3...

xhload3d ⋅ 2014/11/25 ⋅ 0

apache-shiro 学习笔记

(一) 看到SpringSide4居然也用shiro作为安全框架,不是用的spring-security。着实有点惊讶。 apache-shiro的强大可见一斑。 (二) apache-shiro依赖的包 除此之外还有一些东西也不可少spring,...

dmrs ⋅ 2015/10/18 ⋅ 0

Java for Web学习笔记(八一):RESTful(1)设置Rest Context

Wei:我想了想,还是小步快跑,控制每篇学习笔记的篇幅。 我们将给出Rest Context和web Context共存的例子。Service是方在Root Context的,Controller则是位于下一级的Rest Context或者web c...

flowingflying ⋅ 2017/10/02 ⋅ 0

基于HTML5的WebGL结合Box2DJS物理引擎应用

上篇我们基于HT for Web呈现了A* Search Algorithm的3D寻路效果,这篇我们将采用HT for Web 3D来呈现Box2DJS物理引擎的碰撞效果,同上篇其实Box2DJS只是二维的平面碰撞物理引擎,但同样通过3...

xhload3d ⋅ 2015/12/07 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

说说javascript中的那些专业名词

DOM(Document Object Model) 文档对象模型 BOM(Browser Object Model) 浏览器对象模型 ECMA(European Computer Manufacturer's Association) 欧洲计算机制造商协会 W3C(World Wide Web Conso......

hang1989 ⋅ 21分钟前 ⋅ 0

Bootstrap Wizard 多步表单控件

废话 有一块需求是 有多步表单 点击下一步时触发验证一个范围内的表单,点击上一步或取消,清空表单并返回第一步,点击最后一步提交整个表单的 就找到了这个插件,本来自己写了一个原生的 fo...

无极之岚 ⋅ 37分钟前 ⋅ 0

如何利用Spring Cloud构建起自我修复型分布式系统

利用Netflix所打造的组件及各类大家熟知的工具,我们完全可以顺利应对由微服务以及分布式计算所带来的技术挑战。 在过去一年当中,微服务已经成为软件架构领域一个炙手可热的新名词,而且我们...

harries ⋅ 今天 ⋅ 0

临近实习前的感想

再过两星期就要开始新的一段实习了,想想去年的这个时候也在实习,心中不免思绪万千,也一直想写对2017做个总结,但一直迟迟没有下笔。 2017年的春节,我就开始准备开学后找份实习。那时候就...

无精疯 ⋅ 今天 ⋅ 0

Spring AOP(面向切面编程)

Spring AOP概念: Spring AOP 可以劫持一个执行的方法,在方法执行之前或之后添加额外的功能。通常情况下,AOP把项目中需要在多处用到的功能,比如日志、安全和事物等集中到一个类中处理,而...

霍淇滨 ⋅ 今天 ⋅ 0

人工智能、机器学习、数据挖掘以及数据分析有什么联系?

人工智能是目前炙手可热的一个领域,所有的互联网公司以及各路大迦们纷纷表态人工智能将是下一个时代的革命性技术,可与互联网、移动互联网时代的变更相媲美;AlphaGo在围棋领域战胜人类最顶...

董黎明 ⋅ 今天 ⋅ 0

使用 vue-cli 搭建项目

vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目,GitHub地址是:https://github.com/vuejs/vue-cli 一、 安装 node.js 首先需要安装node环境,可以直接到中...

初学者的优化 ⋅ 今天 ⋅ 0

设计模式 之 享元模式

设计模式 之 享元模式 定义 使用共享技术来有效地支持大量细粒度对象的复用 关键点:防止类多次创建,造成内存溢出; 使用享元模式来将内部状态与外部状态进行分离,在循环创建对象的环境下,...

GMarshal ⋅ 今天 ⋅ 0

SpringBoot集成Druid的最简单的小示例

参考网页 https://blog.csdn.net/king_is_everyone/article/details/53098350 建立maven工程 Pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM......

karma123 ⋅ 今天 ⋅ 0

Java虚拟机基本结构的简单记忆

Java堆:一般是放置实例化的对象的地方,堆分新生代和老年代空间,不断未被回收的对象越老,被放入老年代空间。分配最大堆空间:-Xmx 分配初始堆空间:-Xms,分配新生代空间:-Xmn,新生代的大小一...

算法之名 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部