zoukankan      html  css  js  c++  java
  • 014-Go Web 对pg增删改查测试

    1:data/data.go

    package data
    
    import(
        "fmt"
        "database/sql"
        _"github.com/lib/pq"
    )
    
    const(
        host = "192.168.72.128"
        port = 5432
        user = "test"
        password = "test"
        dbname = "testdb"
    )
    
    var Db *sql.DB
    
    func init(){
        var err error
    
        pgInfo := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", 
            host, port, user, password, dbname)
        
        Db, err = sql.Open("postgres", pgInfo)
    
        if err != nil{
            panic(err)
        }
    }

    2:post/post.go

    package post
    
    import(
        ."Chapter10/data"
    )
    
    type Post struct{
        ID        int     `json:"id"`
        Content    string     `json:"content"`
        Author    string    `json:"author"`
    }
    
    func (post *Post) AddPost()(err error){
        sql := "insert into post(content,author) values($1,$2) returning id"
        stmt, err := Db.Prepare(sql)
        if err != nil{
            return
        }
        defer stmt.Close()
        err = stmt.QueryRow(post.Content, post.Author).Scan(&post.ID)
        return
    }
    
    func (post *Post) DelPost()(err error){
        sql := "delete from post where id=$1"
        _,err = Db.Exec(sql, post.ID)
        return
    }
    
    func (post *Post) EditPost()(err error){
        sql := "update post set content=$1 where id=$2"
        _,err = Db.Exec(sql, post.Content, post.ID)
        return
    }
    
    func FindPost(id int)(err error, post Post){
        sql := "select id, content, author from post where id=$1"
        post = Post{}
        err = Db.QueryRow(sql, id).Scan(&post.ID, &post.Content, &post.Author)
        return
    }

    3:main.go

    package main
    
    import(
        "encoding/json"
        "net/http"
        "path"
        "strconv"
        "time"
        ."Chapter10/post"
    )
    
    type Result struct{
        No    int             `json:"no"`
        Msg    string         `json:"msg"`
        Obj interface{} `json:"obj,omitempty"`
        Time time.Time  `json:"response_time"`
    }
    
    func main(){
        server := http.Server{
            Addr: "127.0.0.1:8080",
        }
        http.HandleFunc("/post/", handlerRequest)
        server.ListenAndServe()
    }
    
    func handlerRequest(w http.ResponseWriter, r *http.Request){
        var err error
        switch r.Method{
        case "GET":
            err = handleGet(w, r)
        case "POST":
            err = handlePost(w, r)
        case "PUT":
            err = handlePut(w, r)
        }
    
        if err != nil{
            http.Error(w, err.Error(), http.StatusInternalServerError)
        }
    }
    
    
    
    func handleGet(w http.ResponseWriter, r *http.Request)(err error){
        id, err := strconv.Atoi(path.Base(r.URL.Path))
        if err != nil{
            return
        }
        err,post := FindPost(id)
        if err != nil{
            return
        }
    
        var result = Result{
            No:100,
            Msg:"获取POST信息",
            Obj:post,
            Time:time.Now(),
        }
    
        output, err := json.Marshal(&result)
        if err != nil{
            return
        }
        w.Header().Set("Content-Type", "application/json")
        w.Write(output)
        return
    }
    
    func handlePost(w http.ResponseWriter, r *http.Request)(err error){
        len := r.ContentLength
        body := make([]byte, len)
        r.Body.Read(body)
    
        var post Post
        json.Unmarshal(body, &post)
    
        err = post.AddPost()
        if err != nil{
            return
        }
    
        var result = Result{
            No:100,
            Msg:"保存POST信息",
            Time:time.Now(),
        }
        output, err := json.Marshal(&result)
        if err != nil{
            return
        }
        w.Header().Set("Content-Type", "application/json")
        w.Write(output)
        return
    }    
    
    func handlePut(w http.ResponseWriter, r *http.Request)(err error){
        len := r.ContentLength
        body := make([]byte, len)
        r.Body.Read(body)
    
        var post Post
        json.Unmarshal(body, &post)
    
        err = post.EditPost()
        if err != nil{
            return
        }
    
        var result = Result{
            No:100,
            Msg:"修改POST信息",
            Time:time.Now(),
        }
        output, err := json.Marshal(&result)
        if err != nil{
            return
        }
        w.Header().Set("Content-Type", "application/json")
        w.Write(output)
        return
    }
  • 相关阅读:
    是否该让开发人员跟客户直接交流 狼人:
    2010年浏览器随HTML5而动 五大产品年终盘点 狼人:
    微软推出HTML5实验室站点及两项原型技术 狼人:
    传IE9 RC版将于1月28日公开发布 狼人:
    Python——基础篇 狼人:
    百万级访问量网站的技术准备工作 狼人:
    容器对象spring(4)_ bean属性 scope:作用域和lazyinit
    组件注册关于VC++6.0中,MSDev89\Gallery 文件夹为空的问题
    注入参数spring入门(7)装配Bean中构造参数的注入
    优惠播客成都传智播客java基础班大优惠
  • 原文地址:https://www.cnblogs.com/yshyee/p/9192512.html
Copyright © 2011-2022 走看看