This is a creation in Article, where the information may have evolved or changed.
Package Main
Import (
"Database/sql"
"FMT"
_ "Github.com/mattn/go-sqlite3"
"Html/template"
"Log"
"Net/http"
"StrConv"
)
Type User struct {
ID int
Name string
}
Func (user User) string () string {
Format: = ' ID:%d Name:%s '
Return to FMT. Sprintf (format, user.id, user. Name)
}
Func (User user) Save () {
DB, err: = SQL. Open ("Sqlite3", "./foo.db")
If err! = Nil {
Log. Fatal (ERR)
}
Defer db. Close ()
Log. Println ("INSERT into users (userid,uname) VALUES ('%d,%s '), User.id,user. Name ")
Db. Exec ("INSERT into users (Userid,uname) VALUES (4, ' Test ')")
Db. Exec (FMT. Sprintf (' INSERT into users (userid,uname) values ('%d ', '%s ') ', user.id, user. Name))
If err! = Nil {
Log. Fatal (ERR)
}
}
Func Saveuser (w http. Responsewriter, req *http. Request) {
UserId, _: = StrConv. Atoi (req. Formvalue ("Id"))
Name: = Req. Formvalue ("name")
Out: = StrConv. Itoa (userId) + "-" + Name
U: = &user{id:userid, Name:name}
Log. Println (out, ";", U.string ())
U.save ()
Fmt. fprintf (W, u.string ())
http. Redirect (W, req, "/", HTTP. Statusfound)
}
Func AddUser (w http. Responsewriter, R *http. Request) {
T, _: = template. Parsefiles ("tmpl/adduser.html")
T.execute (W, Nil)
}
Func getusers (w http. Responsewriter, R *http. Request) {
DB, err: = SQL. Open ("Sqlite3", "./foo.db")
If err! = Nil {
Log. Fatal (ERR)
}
Defer db. Close ()
Rows, err: = db. Query ("SELECT * from users")
If err! = Nil {
Log. Fatal (ERR)
}
Defer rows. Close ()
var ID, name string
Users: = ""
For rows. Next () {
Err = rows. Scan (&id, &name)
If Err = = Nil {
Log. Println (ID, name)
Users = users + ID + "," + name + "; \ n"
}
}
Fmt. fprintf (w, users)
}
Func Main () {
http. Handlefunc ("/", AddUser)
http. Handlefunc ("/user", Saveuser)
http. Handlefunc ("/users", Getusers)
ERR: = http. Listenandserve (": 8880", nil)
If err! = Nil {
Log. Fatal ("Listenandserve:", err.) Error ())
}
}