代码:
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 = 3306dbName 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 = sessionIdthis.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) * pagesizeaddSql := " 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 " + addSqlerr = Db.Get(result1, sql1)if err != nil {log.Fatal(err)}var result2 []postinfosql2 := "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.Counttotalpage := 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 = totalpagethis.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=" + iderr := 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) * pagesizevar 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=" + contentIderr = Db.Get(result1, sql1)if err != nil {log.Fatal(err)}var result2 []replyinfosql2 := "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.Counttotalpage := 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 = totalpagethis.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=" + iderr := 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=" + contentIdresult1, 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=" + iderr := 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 = 1096beego.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