Dalam beberapa tahun kebelakangan ini, Golang (Go) sebagai bahasa semakin mendapat perhatian dan aplikasi. Disebabkan oleh kecekapan, kesederhanaan, keselarasan dan ciri-ciri lain, Golang semakin digemari oleh pembangun dan perusahaan. Dari segi membangunkan aplikasi web, Golang juga menunjukkan kelebihan dan daya tarikannya. Artikel ini akan memperkenalkan cara menggunakan Golang untuk melaksanakan aplikasi forum asas.
Sebelum memulakan projek, kami perlu menyediakan persekitaran pembangunan Golang Anda boleh memuat turun dan memasang versi terkini dari https://golang. org/dl/ versi Golang. Pada masa yang sama, kami juga perlu memasang beberapa rangka kerja web (seperti beego, gin, dll.) dan pemacu pangkalan data serta kebergantungan lain.
Apabila melaksanakan aplikasi forum, kami perlu menggunakan rangka kerja Web untuk membantu kami memudahkan proses pembangunan. Rangka kerja Web Golang yang biasa digunakan pada masa ini termasuk beego, gin, echo, dsb. Di sini kami memilih rangka kerja beego untuk dilaksanakan.
beego ialah rangka kerja web berprestasi tinggi yang menyediakan sokongan untuk MVC, API RESTful dan model pembangunan lain. Beego juga menyediakan model pembangunan bersepadu, seperti ORM terbina dalam, Sesi dan komponen lain, yang boleh membantu kami membina aplikasi Web dengan cepat. Menggunakan rangka kerja beego boleh mengurangkan kos dan masa pembangunan kami dengan banyak.
Untuk aplikasi seperti forum, kita perlu menggunakan pangkalan data untuk menyimpan maklumat pengguna, menyiarkan maklumat, ulasan dan data lain. Pangkalan data yang biasa digunakan di Golang termasuk MySQL, MongoDB, PostgreSQL, dll. Di sini, kami memilih MySQL sebagai pangkalan data kami. MySQL menyediakan keupayaan pangkalan data hubungan yang kuat dan juga menyokong akses serentak yang tinggi.
Dengan rangka kerja beego, kami boleh menggunakan alat lebah yang disediakan oleh beego untuk menjana rangka aplikasi Web kami. Bee ialah alat baris arahan berdasarkan beego yang boleh membantu kami membuat projek beego dengan cepat. Ia boleh dipasang melalui arahan berikut:
go get github.com/beego/bee/v2
Selepas memasang bee, kami boleh mencipta projek kami melalui arahan berikut:
bee new forum
Arahan di atas akan mencipta rangka kerja beego- aplikasi forum berasaskan. Selepas menjana rangka kerja aplikasi forum melalui arahan ini, kita perlu menetapkan penghalaan dalam fungsi permulaan main.go, seperti berikut:
func init() { beego.Router("/", &controllers.MainController{}) beego.Router("/topic", &controllers.TopicController{}) beego.Router("/topic/add", &controllers.TopicController{}) beego.Router("/topic/view/:id", &controllers.TopicController{}) beego.Router("/topic/delete/:id", &controllers.TopicController{}) beego.Router("/topic/update/:id", &controllers.TopicController{}) beego.Router("/comment/add", &controllers.CommentController{}) beego.Router("/comment/delete/:id", &controllers.CommentController{}) }
Kami menggunakan penghalaan gaya RESTful.
Dalam aplikasi kami, kami perlu mengakses dan mengendalikan pangkalan data. Di Golang, kami boleh menggunakan pakej pangkalan data/sql untuk melaksanakan operasi pangkalan data SQL, dan kami juga perlu bekerjasama dengan pemacu pangkalan data yang sepadan. Dalam pangkalan data MySQL, kita boleh menggunakan perpustakaan go-sql-driver/mysql untuk mencapai ini. Kod sampel adalah seperti berikut:
dsn := "root:123456@tcp(127.0.0.1:3306)/forum" // 数据库链接信息 db, err := sql.Open("mysql", dsn) if err != nil { beego.Error(err) } defer db.Close() // 查询 rows, err := db.Query("SELECT * FROM topic WHERE id=?", id) if err != nil { beego.Error(err) } defer rows.Close() // 插入 result, err := db.Exec("INSERT INTO topic (title, content, created) VALUES (?, ?, NOW())", title, content) if err != nil { beego.Error(err) }
Dalam kod di atas, kami mewujudkan sambungan dengan pangkalan data melalui dsn dan mentakrifkan pernyataan SQL kami untuk beroperasi.
Dalam melaksanakan aplikasi web, biasanya kita perlu menggunakan enjin templat untuk memaparkan halaman. Rangka kerja beego disertakan dengan enjin templat dan telah mentakrifkan beberapa fungsi templat yang biasa digunakan, yang boleh melaksanakan pemaparan halaman dengan mudah. Dalam projek ini, kami menggunakan enjin templat yang disertakan dengan beego.
Sebagai contoh, dalam views/topic.tpl, anda boleh memaparkan senarai siaran:
{{ if .Topics }} {{ range $index, $value := .Topics }} <tr> <td>{{ $index }}</td> <td><a href="/topic/view/{{ $value.Id }}">{{ $value.Title }}</a></td> <td>{{ $value.Created }}</td> <td><a href="/topic/update/{{ $value.Id }}">编辑</a> | <a href="/topic/delete/{{ $value.Id }}">删除</a></td> </tr> {{ end }} {{ else }} <tr> <td colspan="4" style="text-align: center;"><i>暂无数据</i></td> </tr> {{ end }}
Melalui persediaan di atas Dan menggunakan fungsi komponen yang disediakan oleh rangka kerja beego, kita boleh dengan mudah melaksanakan aplikasi forum asas. Untuk projek ini, kami perlu melaksanakan fungsi berikut:
Di sini, kami memperkenalkan cara menghantar, membalas, mengedit dan memadamkan siaran.
Fungsi penyiaran ialah salah satu fungsi teras aplikasi forum. Langkah pelaksanaan adalah seperti berikut:
beego.Router("/topic/add", &controllers.TopicController{}, "get:Add") beego.Router("/topic/add", &controllers.TopicController{}, "post:Post")
func (c *TopicController) Add() { c.TplName = "topic_add.tpl" } func (c *TopicController) Post() { // 获取参数 title := c.GetString("title") content := c.GetString("content") // 写入数据库 if title != "" && content != "" { _, err := models.AddTopic(title, content) if err != nil { beego.Error(err) c.Redirect("/", 302) } else { c.Redirect("/", 302) } } else { c.Redirect("/", 302) } }
Dalam kaedah Tambah, kami akan memberikan templat tema untuk pengguna menambah siaran. Dalam kaedah Pos, kami memperoleh parameter borang yang diluluskan oleh halaman hadapan dan menulisnya ke pangkalan data.
Fungsi balasan ialah satu lagi fungsi penting aplikasi forum. Langkah pelaksanaan adalah seperti berikut:
beego.Router("/comment/add", &controllers.CommentController{}, "post:Add")
func (c *CommentController) Add() { // 获取参数 tid, _ := c.GetInt("tid") comment := c.GetString("comment") // 写入数据库 if tid > 0 && comment != "" { _, err := models.AddComment(tid, comment) if err != nil { beego.Error(err) } } c.Redirect("/topic/view/"+fmt.Sprintf("%d", tid), 302) }
Dalam kaedah Tambah, kami memperoleh parameter borang yang diluluskan oleh halaman hadapan, menyimpan kandungan balasan dalam pangkalan data dan melompat ke halaman butiran siaran yang sepadan.
Dalam aplikasi forum, pengguna selalunya perlu mengedit siaran mereka sendiri. Langkah pelaksanaan adalah seperti berikut:
beego.Router("/topic/update/:id", &controllers.TopicController{}, "get:Update") beego.Router("/topic/update/:id", &controllers.TopicController{}, "post:Edit")
func (c *TopicController) Update() { id, _ := c.GetInt(":id") topic, err := models.GetTopicById(id) if err != nil { beego.Error(err) c.Redirect("/", 302) } else { c.Data["Topic"] = topic c.TplName = "topic_edit.tpl" } } func (c *TopicController) Edit() { // 获取参数 id, _ := c.GetInt("id") title := c.GetString("title") content := c.GetString("content") // 更新数据库 if title != "" && content != "" { err := models.EditTopic(id, title, content) if err != nil { beego.Error(err) } else { c.Redirect("/", 302) } } else { c.Redirect("/", 302) } }
Dalam kaedah Kemas Kini, kami memperoleh kandungan siaran yang sepadan berdasarkan id siaran dan memaparkannya ke dalam halaman untuk pengguna mengedit siaran. Dalam kaedah Edit, kami mengemas kini kandungan siaran dengan mendapatkan parameter yang diluluskan oleh halaman hujung hadapan.
在论坛应用中,用户不仅需要编辑自己的帖子,还需要删除不符合要求的帖子等。实现步骤如下:
beego.Router("/topic/delete/:id", &controllers.TopicController{}, "get:Delete")
func (c *TopicController) Delete() { id, _ := c.GetInt(":id") err := models.DeleteTopic(id) if err != nil { beego.Error(err) } c.Redirect("/", 302) }
在Delete方法中,我们根据帖子的id删除该帖子。
通过本文的介绍,我们可以看到使用Golang开发Web应用的过程和实现详情。使用beego框架和MySQL数据库,我们可以轻松快速地搭建出一个高效、稳定的论坛应用。同时,我们也已经了解到了如何通过Golang实现前端页面渲染、路由访问、数据库操作等功能,这些功能在Golang的Web应用中非常重要。
Atas ialah kandungan terperinci Cara menggunakan Golang untuk melaksanakan aplikasi forum asas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!