文档章节

go web 例子

昏鸦
 昏鸦
发布于 2014/02/20 19:31
字数 754
阅读 134
收藏 2

项目结构:


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
博文 182
码字总数 59043
作品 0
程序员
shiro过滤器过滤属性含义

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

ada_young
2016/04/21
1K
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
187
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
9
0
Spring整合Shiro

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

_Roger_
2015/12/15
215
0
Nginx负载均衡的4种方案配置

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

孟飞阳
2016/08/06
18
0

没有更多内容

加载失败,请刷新页面

加载更多

linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
14
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
1
0
Coding and Paper Letter(四十)

资源整理。 1 Coding: 1.Tomislav Hengl撰写的非官方作者指南:Michael Gould•Wouter Gerritsma。 UnofficialGuide4Authors 2.R语言包rwrfhydro,社区贡献的工具箱,用于管理,分析和可视化...

胖胖雕
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部