SoFunction
Updated on 2025-03-04

How to implement a simple message board in Go language

package main
import (
    // "fmt"
    "io"
    "log"
    "net/http"
    "text/template"
    "time"
    "database/sql"
    "/ziutek/mymysql/godrv"
)
   
// Message structure
type Liuyan struct {
    Id int
    Name string
    Content string
    Time int
}
   
// Show message time
func (l Liuyan) ShowTime() string {
    t := (int64(), 0)
    return ("2006-01-02 15:04:05")
}
   
func main() {
    ("SET NAMES utf8")
   
// Connect to the database
    db, err := ("mymysql", "tcp:127.0.0.1:3306*go/root/123456")
    if err != nil {
        panic(err)
    }
    defer ()
   
// Prepare the template
    tpl, err := ("liuyanbook").Parse(html)
    if err != nil {
        panic(err)
    }
   
// Show the message page /
    requestList := func(w , req *) {
// Query data
        rows, err := ("select * from liuyan")
        if err != nil {
            (err)
        }
        defer ()
   
// Get data
        lys := []Liuyan{}
        for () {
            ly := Liuyan{}
            err := (&, &, &, &)
            if nil != err {
                (err)
            }
            lys = append(lys, ly)
        }
   
// Display data
        err = (w, "list", lys)
        if err != nil {
            (err)
        }
    }
   
// Message page /liuyan
    requestLiuyan := func(w , req *) {
        err := ()
        if err != nil{
            (err)
        }
   
        if "POST" == {
            if len(["name"]) < 1 {
(w, "parameter error!\n")
                return
            }
            if len(["content"]) < 1 {
(w, "parameter error!\n")
                return
            }
   
            name := (("name"))
            content := (("content"))
   
// SQL statement
            sql, err := ("insert into liuyan(name, content, time) values(?, ?, ?)")
            if err != nil {
                (err)
            }
            defer ()
   
// sql parameters and execute
            _, err = (name, content, ().Unix())
            if err != nil {
                (err)
            }
   
// Jump
            ().Add("Location", "/")
            (302)
   
// Prompt message
(w, "Submitted successfully!\n")
   
            return
        }
   
        err = (w, "liuyan", nil)
        if err != nil {
            (err)
        }
    }
   
    ("/", requestList)
    ("/liuyan", requestLiuyan)
    err = (":12345", nil)
    if err != nil {
        ("ListenAndServe: ", err)
    }
}
   
// Web page template
var html string = `{{define "list"}}{{/* Message list page */}}<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p><a href="/liuyan">Leave me a message</a></p>
    <table>
{{range .}}
    <tr>
        <td>{{.Id}}</td><td>{{.Name}}</td><td>{{.Content}}</td><td>{{.ShowTime}}</td>
    </tr>
{{end}}
    </table>
</body>
</html>{{end}}
{{define "liuyan"}}{{/* Post a message page */}}<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
    <form method="post">
Name:<input type="text" name="name" /><br>
Content:<input type="text" name="content" /><br>
<input type="submit" value="submit" />
    </form>
</body>
</html>{{end}}