留言板是Golang Web开发入门的经典练手项目,核心功能包含留言提交、留言列表查询,整体逻辑清晰不复杂,很适合用来熟悉Golang的Web开发流程。下面我们就一步步完成这个应用的开发。

环境准备与项目初始化
首先我们需要准备好开发环境,确保本地已经安装Golang和MySQL,然后初始化项目并安装需要的依赖包。这里我们使用gin作为Web框架,使用gorm作为数据库操作ORM。
// 初始化项目 go mod init message_board // 安装依赖 go get -u github.com/gin-gonic/gin go get -u gorm.io/gorm go get -u gorm.io/driver/mysql
数据库设计
留言板只需要一张留言表就可以满足基础需求,表结构包含留言ID、留言内容、留言人、创建时间这几个核心字段,下面是建表语句。
CREATE TABLE `messages` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` text NOT NULL COMMENT '留言内容', `author` varchar(50) NOT NULL COMMENT '留言人', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
项目结构搭建
我们采用简单的分层结构,把不同功能的代码放到对应的文件中,方便后续维护扩展。
- main.go:项目入口,启动Web服务
- config.go:数据库配置相关代码
- model.go:数据模型定义
- handler.go:接口处理逻辑
核心代码实现
数据库配置与连接
首先在config.go中编写数据库连接的逻辑,使用gorm连接MySQL数据库。
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB
func InitDB() error {
// 数据库连接字符串,替换为自己的MySQL账号密码和数据库名
dsn := "root:password@tcp(127.0.0.1:3306)/message_board?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
return err
}
DB = db
// 自动迁移表结构,确保表存在
return DB.AutoMigrate(&Message{})
}数据模型定义
在model.go中定义留言对应的结构体,和数据库表字段对应。
package main
import "time"
type Message struct {
ID uint `gorm:"primaryKey" json:"id"`
Content string `json:"content" binding:"required"` // 留言内容,提交时必填
Author string `json:"author" binding:"required"` // 留言人,提交时必填
CreatedAt time.Time `json:"created_at"`
}接口处理逻辑
在handler.go中编写两个核心接口的处理函数,分别是提交留言和查询留言列表。
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
// 提交留言接口
func AddMessage(c *gin.Context) {
var msg Message
// 绑定请求参数
if err := c.ShouldBindJSON(&msg); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "参数错误,请检查留言内容和留言人是否填写"})
return
}
// 插入数据库
if err := DB.Create(&msg).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "留言提交失败"})
return
}
c.JSON(http.StatusOK, gin.H{"message": "留言提交成功", "data": msg})
}
// 查询留言列表接口
func GetMessageList(c *gin.Context) {
var msgList []Message
// 按创建时间倒序查询所有留言
if err := DB.Order("created_at desc").Find(&msgList).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "查询留言列表失败"})
return
}
c.JSON(http.StatusOK, gin.H{"data": msgList})
}项目入口与路由配置
最后在main.go中完成服务启动和路由注册,把各个部分串联起来。
package main
import "github.com/gin-gonic/gin"
func main() {
// 初始化数据库
if err := InitDB(); err != nil {
panic("数据库连接失败:" + err.Error())
}
// 创建gin引擎
r := gin.Default()
// 注册路由
r.POST("/message", AddMessage) // 提交留言
r.GET("/messages", GetMessageList) // 查询留言列表
// 启动服务,监听8080端口
r.Run(":8080")
}功能测试
启动项目后,我们可以使用接口测试工具验证功能是否正常。提交留言可以发送POST请求到http://127.0.0.1:8080/message,请求体为{"content":"这是第一条留言","author":"测试用户"}。查询留言列表可以发送GET请求到http://127.0.0.1:8080/messages,就能拿到所有留言的倒序列表。
整个留言板应用的核心逻辑就完成了,后续还可以根据需求扩展功能,比如添加留言删除、留言分页、用户登录等能力,进一步熟悉Golang Web开发的更多特性。