代码:
package main /** go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn go mod init gos go mod tidy go mod vendor */ import ( "crypto/md5" "database/sql" "fmt" "log" "math" "strconv" "github.com/astaxie/beego" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" ) var ( userName string = "root" password string = "123456" ipAddrees string = "127.0.0.1" port int = 3306 dbName string = "my_bbs" charset string = "utf8mb4" ) type countinfo struct { Count int64 `db:"count" json:"count"` } type userinfo struct { Id int `db:"id" json:"id"` Username string `db:"username" json:"username"` Nickname string `db:"nickname" json:"nickname"` AddTime string `db:"addTime" json:"addTime"` SessionId string `db:"sessionId" json:"sessionId"` } type postinfo struct { Id int `db:"id" json:"id"` Title string `db:"title" json:"title"` UserId string `db:"userId" json:"userId"` UserNickename string `db:"userNickename" json:"userNickename"` ReplyNum int `db:"replyNum" json:"replyNum"` UpdateTime string `db:"updateTime" json:"updateTime"` } type postinfodetail struct { Id int `db:"id" json:"id"` Title string `db:"title" json:"title"` Content string `db:"content" json:"content"` UserId int `db:"userId" json:"userId"` UserNickename string `db:"userNickename" json:"userNickename"` ReplyNum int `db:"replyNum" json:"replyNum"` UpdateTime string `db:"updateTime" json:"updateTime"` } type replyinfo struct { Id int `db:"id" json:"id"` ContentId int `db:"contentId" json:"contentId"` Content string `db:"content" json:"content"` ReplyUserId int `db:"replyUserId" json:"replyUserId"` ReplyUserNickename string `db:"replyUserNickename" json:"replyUserNickename"` AddTime string `db:"addTime" json:"addTime"` } type postlistpage struct { Totalpage int `db:"totalpage" json:"totalpage"` Data []postinfo `db:"data" json:"data"` } type replylistpage struct { Totalpage int `db:"totalpage" json:"totalpage"` Data []replyinfo `db:"data" json:"data"` } type Responsex struct { Code int `json:"code"` Msg string `json:"msg"` Data string `json:"data"` } type Responseuserinfo struct { Code int `json:"code"` Msg string `json:"msg"` Data *userinfo `json:"data"` } type Responsepostlistpage struct { Code int `json:"code"` Msg string `json:"msg"` Data *postlistpage `json:"data"` } type Responsepostinfodetail struct { Code int `json:"code"` Msg string `json:"msg"` Data *postinfodetail `json:"data"` } type Responsereplylistpage struct { Code int `json:"code"` Msg string `json:"msg"` Data *replylistpage `json:"data"` } type Responsereplyinfo struct { Code int `json:"code"` Msg string `json:"msg"` Data *replyinfo `json:"data"` } var pagesize = 20 var secretKey = "saacac3423@21212" func connectMysql() *sqlx.DB { dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s", userName, password, ipAddrees, port, dbName, charset) Db, err := sqlx.Open("mysql", dsn) if err != nil { log.Fatal(err) } return Db } func calcMD5(message string) string { data := []byte(message) return fmt.Sprintf("%x", md5.Sum(data)) } func getloginuserinfo(sessionId string) *userinfo { var Db *sqlx.DB = connectMysql() defer Db.Close() var result1 *userinfo = new(userinfo) sql1 := "select id,username,nickname,addTime,sessionId from user where sessionId='" + sessionId + "'" err := Db.Get(result1, sql1) if err != nil { log.Fatal(err) } return result1 } type IndexController struct { beego.Controller } type UserRegisterController struct { beego.Controller } type UserLoginController struct { beego.Controller } type UserLogoutController struct { beego.Controller } type UserInfoController struct { beego.Controller } type PostlistController struct { beego.Controller } type PostdetailController struct { beego.Controller } type PostaddController struct { beego.Controller } type PosteditController struct { beego.Controller } type PostdeleteController struct { beego.Controller } type ReplylistController struct { beego.Controller } type ReplydetailController struct { beego.Controller } type ReplyaddController struct { beego.Controller } type ReplyeditController struct { beego.Controller } type ReplydeleteController struct { beego.Controller } func (this *IndexController) Get() { this.Ctx.Output.Header("Server", "go.beego") this.Ctx.WriteString("此站接口使用go.beego实现,<a href='api.html' target='_blank'>接口列表</a>") } func (this *UserRegisterController) Get() { this.Ctx.Output.Header("Server", "go.beego") username := this.Ctx.Input.Query("username") password := this.Ctx.Input.Query("password") nickname := this.Ctx.Input.Query("nickname") passwordMd5 := calcMD5(password) var Db *sqlx.DB = connectMysql() defer Db.Close() var result1 *userinfo = new(userinfo) sql1 := "select id,username,nickname,addTime,sessionId from user where username='" + username + "'" err := Db.Get(result1, sql1) if err == sql.ErrNoRows { sql2 := "insert into user(username, password, nickname) value('" + username + "', '" + passwordMd5 + "', '" + nickname + "')" result2, err := Db.Exec(sql2) if err != nil { log.Fatal(err) log.Fatal(result2) } insertId, err := result2.LastInsertId() this.Data["json"] = &Responsex{Code: 0, Msg: "", Data: fmt.Sprintf("%d", insertId)} this.ServeJSON() } else if result1.Id > 0 { this.Data["json"] = &Responsex{Code: 1, Msg: "用户名已经存在", Data: ""} this.ServeJSON() } else { this.Data["json"] = &Responsex{Code: 1, Msg: "未知错误", Data: ""} this.ServeJSON() } } func (this *UserLoginController) Get() { this.Ctx.Output.Header("Server", "go.beego") username := this.Ctx.Input.Query("username") password := this.Ctx.Input.Query("password") passwordMd5 := calcMD5(password) var Db *sqlx.DB = connectMysql() defer Db.Close() var result1 *userinfo = new(userinfo) sql1 := "select id,username,nickname,addTime,sessionId from user where username='" + username + "' and password='" + passwordMd5 + "'" err := Db.Get(result1, sql1) if err == sql.ErrNoRows { this.Data["json"] = &Responsex{Code: 1, Msg: "用户名或者密码错误", Data: ""} this.ServeJSON() } else { sessionId := calcMD5(secretKey + strconv.Itoa(result1.Id) + result1.AddTime) sql2 := "update user set sessionId='" + sessionId + "' where id=" + strconv.Itoa(result1.Id) result2, err := Db.Exec(sql2) if err != nil { log.Fatal(err) log.Fatal(result2) } result1.SessionId = sessionId this.Data["json"] = &Responseuserinfo{Code: 0, Msg: "", Data: result1} this.ServeJSON() } } func (this *UserLogoutController) Get() { this.Ctx.Output.Header("Server", "go.beego") sessionId := this.Ctx.Input.Query("sessionId") var Db *sqlx.DB = connectMysql() defer Db.Close() var result1 *userinfo = new(userinfo) sql1 := "select id,username,nickname,addTime,sessionId from user where sessionId='" + sessionId + "'" err := Db.Get(result1, sql1) if err == sql.ErrNoRows { // } else { sql2 := "update user set sessionId='' where sessionId='" + sessionId + "'" result2, err := Db.Exec(sql2) if err != nil { log.Fatal(err) log.Fatal(result2) } result1.SessionId = "" } this.Data["json"] = &Responseuserinfo{Code: 0, Msg: "", Data: result1} this.ServeJSON() } func (this *UserInfoController) Get() { this.Ctx.Output.Header("Server", "go.beego") sessionId := this.Ctx.Input.Query("sessionId") var Db *sqlx.DB = connectMysql() defer Db.Close() var result1 *userinfo = new(userinfo) sql1 := "select id,username,nickname,addTime,sessionId from user where sessionId='" + sessionId + "'" err := Db.Get(result1, sql1) if err != nil { log.Fatal(err) } this.Data["json"] = &Responseuserinfo{Code: 0, Msg: "", Data: result1} this.ServeJSON() } func (this *PostlistController) Get() { this.Ctx.Output.Header("Server", "go.beego") page, err := strconv.Atoi(this.Ctx.Input.Query("page")) keyword := this.Ctx.Input.Query("keyword") if page <= 0 { page = 1 } start := (page - 1) * pagesize addSql := " isDel=0 " if keyword != "" { addSql = " isDel=0 and title like '%" + keyword + "%' " } var Db *sqlx.DB = connectMysql() defer Db.Close() var result1 *countinfo = new(countinfo) sql1 := "select count(1) as count from content where " + addSql err = Db.Get(result1, sql1) if err != nil { log.Fatal(err) } var result2 []postinfo sql2 := "select id,title,userId,userNickename,replyNum,updateTime from content where " + addSql + " order by updateTime desc limit " + strconv.Itoa(start) + "," + strconv.Itoa(pagesize) err = Db.Select(&result2, sql2) if err != nil { log.Fatal(err) } totalcount := result1.Count totalpage := int(math.Ceil(float64(totalcount) / float64(pagesize))) var result3 *postlistpage = new(postlistpage) if result2 != nil { result3.Data = result2 } else { result3.Data = make([]postinfo, 0) } result3.Totalpage = totalpage this.Data["json"] = &Responsepostlistpage{Code: 0, Msg: "", Data: result3} this.ServeJSON() } func (this *PostdetailController) Get() { this.Ctx.Output.Header("Server", "go.beego") id := this.Ctx.Input.Query("id") var Db *sqlx.DB = connectMysql() defer Db.Close() var result1 *postinfodetail = new(postinfodetail) sql1 := "select id,title,content,userId,userNickename,replyNum,updateTime from content where isDel=0 and id=" + id err := Db.Get(result1, sql1) if err != nil { log.Fatal(err) } this.Data["json"] = &Responsepostinfodetail{Code: 0, Msg: "", Data: result1} this.ServeJSON() } func (this *PostaddController) Get() { this.Ctx.Output.Header("Server", "go.beego") title := this.Ctx.Input.Query("title") content := this.Ctx.Input.Query("content") sessionId := this.Ctx.Input.Query("sessionId") var Db *sqlx.DB = connectMysql() defer Db.Close() var userinfo1 *userinfo = getloginuserinfo(sessionId) if userinfo1.Id <= 0 { this.Data["json"] = &Responsex{Code: 1, Msg: "请先登录", Data: ""} this.ServeJSON() } else { sql2 := "insert into content(title, content, userId, userNickename) value('" + title + "', '" + content + "', " + strconv.Itoa(userinfo1.Id) + ", '" + userinfo1.Nickname + "')" result2, err := Db.Exec(sql2) if err != nil { log.Fatal(err) log.Fatal(result2) } insertId, err := result2.LastInsertId() this.Data["json"] = &Responsex{Code: 0, Msg: "", Data: fmt.Sprintf("%d", insertId)} this.ServeJSON() } } func (this *PosteditController) Get() { this.Ctx.Output.Header("Server", "go.beego") id := this.Ctx.Input.Query("id") title := this.Ctx.Input.Query("title") content := this.Ctx.Input.Query("content") sessionId := this.Ctx.Input.Query("sessionId") var Db *sqlx.DB = connectMysql() defer Db.Close() var userinfo1 *userinfo = getloginuserinfo(sessionId) if userinfo1.Id <= 0 { this.Data["json"] = &Responsex{Code: 1, Msg: "请先登录", Data: ""} this.ServeJSON() } else { sql2 := "update content set title='" + title + "',content='" + content + "',userId=" + strconv.Itoa(userinfo1.Id) + ",userNickename='" + userinfo1.Nickname + "' where id=" + id + " and userId=" + strconv.Itoa(userinfo1.Id) result2, err := Db.Exec(sql2) if err != nil { log.Fatal(err) log.Fatal(result2) } this.Data["json"] = &Responsex{Code: 0, Msg: "", Data: ""} this.ServeJSON() } } func (this *PostdeleteController) Get() { this.Ctx.Output.Header("Server", "go.beego") id := this.Ctx.Input.Query("id") sessionId := this.Ctx.Input.Query("sessionId") var Db *sqlx.DB = connectMysql() defer Db.Close() var userinfo1 *userinfo = getloginuserinfo(sessionId) if userinfo1.Id <= 0 { this.Data["json"] = &Responsex{Code: 1, Msg: "请先登录", Data: ""} this.ServeJSON() } else { sql2 := "update content set isDel=1 where id=" + id + " and userId=" + strconv.Itoa(userinfo1.Id) result2, err := Db.Exec(sql2) if err != nil { log.Fatal(err) log.Fatal(result2) } this.Data["json"] = &Responsex{Code: 0, Msg: "", Data: ""} this.ServeJSON() } } func (this *ReplylistController) Get() { this.Ctx.Output.Header("Server", "go.beego") page, err := strconv.Atoi(this.Ctx.Input.Query("page")) contentId := this.Ctx.Input.Query("contentId") if page <= 0 { page = 1 } start := (page - 1) * pagesize var Db *sqlx.DB = connectMysql() defer Db.Close() var result1 *countinfo = new(countinfo) sql1 := "select count(1) as count from reply where isDel=0 and contentId=" + contentId err = Db.Get(result1, sql1) if err != nil { log.Fatal(err) } var result2 []replyinfo sql2 := "select id,content,replyUserId,replyUserNickename,addTime,contentId from reply where isDel=0 and contentId=" + contentId + " order by id asc limit " + strconv.Itoa(start) + "," + strconv.Itoa(pagesize) err = Db.Select(&result2, sql2) if err != nil { log.Fatal(err) } totalcount := result1.Count totalpage := int(math.Ceil(float64(totalcount) / float64(pagesize))) var result3 *replylistpage = new(replylistpage) if result2 != nil { result3.Data = result2 } else { result3.Data = make([]replyinfo, 0) } result3.Totalpage = totalpage this.Data["json"] = &Responsereplylistpage{Code: 0, Msg: "", Data: result3} this.ServeJSON() } func (this *ReplydetailController) Get() { this.Ctx.Output.Header("Server", "go.beego") id := this.Ctx.Input.Query("id") var Db *sqlx.DB = connectMysql() defer Db.Close() var result1 *replyinfo = new(replyinfo) sql1 := "select id,content,replyUserId,replyUserNickename,addTime,contentId from reply where isDel=0 and id=" + id err := Db.Get(result1, sql1) if err != nil { log.Fatal(err) } this.Data["json"] = &Responsereplyinfo{Code: 0, Msg: "", Data: result1} this.ServeJSON() } func (this *ReplyaddController) Get() { this.Ctx.Output.Header("Server", "go.beego") contentId := this.Ctx.Input.Query("contentId") content := this.Ctx.Input.Query("content") sessionId := this.Ctx.Input.Query("sessionId") var Db *sqlx.DB = connectMysql() defer Db.Close() var userinfo1 *userinfo = getloginuserinfo(sessionId) if userinfo1.Id <= 0 { this.Data["json"] = &Responsex{Code: 1, Msg: "请先登录", Data: ""} this.ServeJSON() } else { sql1 := "update content set replyNum=replyNum+1 where id=" + contentId result1, err := Db.Exec(sql1) if err != nil { log.Fatal(err) log.Fatal(result1) } sql2 := "insert into reply(contentId, content, replyUserId, replyUserNickename) value(" + contentId + ", '" + content + "', " + strconv.Itoa(userinfo1.Id) + ", '" + userinfo1.Nickname + "')" result2, err := Db.Exec(sql2) if err != nil { log.Fatal(err) log.Fatal(result2) } insertId, err := result2.LastInsertId() this.Data["json"] = &Responsex{Code: 0, Msg: "", Data: fmt.Sprintf("%d", insertId)} this.ServeJSON() } } func (this *ReplyeditController) Get() { this.Ctx.Output.Header("Server", "go.beego") id := this.Ctx.Input.Query("id") content := this.Ctx.Input.Query("content") sessionId := this.Ctx.Input.Query("sessionId") var Db *sqlx.DB = connectMysql() defer Db.Close() var userinfo1 *userinfo = getloginuserinfo(sessionId) if userinfo1.Id <= 0 { this.Data["json"] = &Responsex{Code: 1, Msg: "请先登录", Data: ""} this.ServeJSON() } else { sql2 := "update reply set content='" + content + "',replyUserId=" + strconv.Itoa(userinfo1.Id) + ",replyUserNickename='" + userinfo1.Nickname + "' where id=" + id + " and replyUserId=" + strconv.Itoa(userinfo1.Id) result2, err := Db.Exec(sql2) if err != nil { log.Fatal(err) log.Fatal(result2) } this.Data["json"] = &Responsex{Code: 0, Msg: "", Data: ""} this.ServeJSON() } } func (this *ReplydeleteController) Get() { this.Ctx.Output.Header("Server", "go.beego") id := this.Ctx.Input.Query("id") sessionId := this.Ctx.Input.Query("sessionId") var Db *sqlx.DB = connectMysql() defer Db.Close() var userinfo1 *userinfo = getloginuserinfo(sessionId) if userinfo1.Id <= 0 { this.Data["json"] = &Responsex{Code: 1, Msg: "请先登录", Data: ""} this.ServeJSON() } else { var result0 *replyinfo = new(replyinfo) sql0 := "select id,content,replyUserId,replyUserNickename,addTime,contentId from reply where isDel=0 and id=" + id err := Db.Get(result0, sql0) if err != nil { log.Fatal(err) } sql1 := "update content set replyNum=replyNum-1 where id=" + strconv.Itoa(result0.ContentId) result1, err := Db.Exec(sql1) if err != nil { log.Fatal(err) log.Fatal(result1) } sql2 := "update reply set isDel=1 where id=" + id + " and replyUserId=" + strconv.Itoa(userinfo1.Id) result2, err := Db.Exec(sql2) if err != nil { log.Fatal(err) log.Fatal(result2) } this.Data["json"] = &Responsex{Code: 0, Msg: "", Data: ""} this.ServeJSON() } } func main() { beego.BConfig.AppName = "beego" beego.BConfig.ServerName = "beego" beego.BConfig.Listen.HTTPAddr = "127.0.0.1" beego.BConfig.Listen.HTTPPort = 1096 beego.Router("/", &IndexController{}) beego.Router("/user/register", &UserRegisterController{}) beego.Router("/user/login", &UserLoginController{}) beego.Router("/user/logout", &UserLogoutController{}) beego.Router("/user/getuserinfo", &UserInfoController{}) beego.Router("/post/list", &PostlistController{}) beego.Router("/post/detail", &PostdetailController{}) beego.Router("/post/add", &PostaddController{}) beego.Router("/post/edit", &PosteditController{}) beego.Router("/post/delete", &PostdeleteController{}) beego.Router("/reply/list", &ReplylistController{}) beego.Router("/reply/detail", &ReplydetailController{}) beego.Router("/reply/add", &ReplyaddController{}) beego.Router("/reply/edit", &ReplyeditController{}) beego.Router("/reply/delete", &ReplydeleteController{}) beego.Run() }
输出:
D:\workspace\studys\study_bbs>D:\software\go\bin\go.exe run D:\workspace\studys\study_bbs\start_web_beego.go 2024/09/02 14:14:04.499 [I] http server Running on http://127.0.0.1:1096
标签:beego,string,type,db,json,go,bbs,struct From: https://www.cnblogs.com/xuxiaobo/p/18392616