# 起步:项目搭建
## 目标
通过完成一个留言板应用来熟悉云开发中go sdk中的使用,主要分为以下三个内容
1. 如何利用云开发中的[数据库](https://developers.weixin.qq.com/minigame/dev/wxcloud/reference-http-api/database/#%E6%95%B0%E6%8D%AE%E5%BA%93)进行留言内容的保存
1. 使用[云函数](https://developers.weixin.qq.com/minigame/dev/wxcloud/reference-http-api/functions/)进行文本内容的过滤
1. 使用[云开发存储](https://developers.weixin.qq.com/minigame/dev/wxcloud/reference-http-api/storage/)能力进行附件的保存
## 环境介绍
### Golang 1.13
项目中使用Golang 1.13版本进行开发,并且使用go module 进行依赖管理
### 编辑器:Goland
代码编辑工具
### 热编译工具:Gowatch
Go 程序热编译工具,提升开发效率
官网地址: [https://github.com/silenceper/gowatch](https://github.com/silenceper/gowatch)
**快速安装:**
```basic
go get -u github.com/silenceper/gowatch
```
### web开发框架-Gin
一个web开发框架,方便快速构建一个web应用
官网: [https://github.com/gin-gonic/gin](https://github.com/gin-gonic/gin)
### Wechat SDK For Go
使用Golang对微信公众号,小程序,云开发等API进行封装,使得Go项目中可以方便上手
官网: [https://github.com/silenceper/wechat/](https://github.com/silenceper/wechat/)
文档:[https://pkg.go.dev/github.com/silenceper/wechat/tcb?tab=doc](https://pkg.go.dev/github.com/silenceper/wechat/tcb?tab=doc)
### 云开发
集成数据库,存储,云函数等功能的平台
使用文档:[https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/)
在开始开发前,请注册一个小程序获取 `app_id` , `app_secret`参数,并开启云开发功能。
## 初始化项目
> 本项目中使用go module进行依赖管理
在工作目录创建一个项目`guestbook`,并使用`go mod init github.com/go-demo/guestbook`进行初始化,后面接的是`import path`。
```bash
mkdir guestbook
cd guestbook
go mod init github.com/go-demo/guestbook
```
### 编写main.go文件
使用goland编辑器中打开这个项目,并创建一个`main.go`文件,内容如下:
```go
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
```
### 编译并运行
我们可以在Goland编辑器中Terminal面板中进入项目目录,使用`gowatch`命令对该项目进行热编译,看到图片中的log输出表示已经启动成功:
> gowatch会监听项目中文件的变化,当进行变化后,对项目进行build 和run,这样我们就可以在一边修改代码一边对项目进行编译及时发现错误,是不是效率提升了呢 :>

(初次build会通过go module自动下载依赖,请注意开启go module功能)
我们通过访问`127.0.0.1:8080/ping`就可以看到页面上输出`{"message":"pong"}`说明服务启动成功。
## 渲染留言页面
我们可以先规划我们的UI是怎么样子?
包含两部分:
- 留言框:包含留言内容,附件上传,用户名,提交按钮
- 内容展示:展示留言内容,附件以及留言者和留言日期
界面展示如下:

### 创建模板文件
对应的html代码如下,我们保存在项目中的template/index.html文件中:
```html
留言板内容