搭建基础架构
目录结构
conf 配置文件
logs 日志文件
controllers 控制器 接受参数 api的入口
datasource 数据库配置
models 结构体模型
repo 数据库的操作
route 注册路由
service 业务逻辑代码
utils 工具类
config.json 配置文件的映射
main.go 主程序入口热启动
改动内容自动重启 速度快
go get -u github.com/kataras/rizla
rizla main.go修改main.go
日志输出到本地
func newLogFile() *os.File {
//20060102是语法糖 为yyyyMMdd
filename := "logs/" + time.Now().Format("20060102") + ".log"
// 打开以当前日期为文件名的文件(不存在则创建文件,存在则追加内容)
f, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
panic(err)
}
return f
}main.go中增加
func main() {
f := newLogFile()
defer f.Close()
app := iris.New()
// 在控制台输出同时,会被写入日志文件
app.Logger().SetOutput(io.MultiWriter(f, os.Stdout))
// 不在控制台输出 只写入日志文件
//app.Logger().SetOutput(f)
// 设置日志级别
app.Logger().SetLevel("debug")
// 添加中间件
app.Use(recover.New())
app.Use(logger.New(
logger.Config{
// 是否记录状态码,默认false
Status: true,
// 是否记录远程IP地址,默认false
IP: true,
// 是否呈现HTTP谓词,默认false
Method: true,
// 是否记录请求路径,默认true
Path: true,
// 是否开启查询追加,默认false
Query: true,
}))
...注册template
在main.go 的main() 方法中添加如下代码
// 注册静态模版
html := iris.HTML("./web/views/", ".html").Reload(true)
// 注册HTML
app.RegisterView(html)
// 注册静态资源
app.HandleDir("/assets", iris.Dir("./web/assets"))注册404和500错误
在main.go 的main() 方法中添加如下代码
app.OnErrorCode(iris.StatusNotFound, notFound)
app.OnErrorCode(iris.StatusInternalServerError, internalServerError)func代码如下
func notFound(ctx iris.Context) {
// 出现 404 的时候,就跳转到 $views_dir/errors/404.html 模板
err := ctx.View("errors/404.html")
if err != nil {
return
}
}
func internalServerError(ctx iris.Context) {
_, err := ctx.WriteString("出现问题,请重试")
if err != nil {
return
}
}修改app启动方式
// 启动服务
err := app.Run(
iris.Addr(":8080"), // 地址
iris.WithCharset("UTF-8"), // 国际化
iris.WithOptimizations, // 自动优化
iris.WithoutServerError(iris.ErrServerClosed), // 忽略框架错误
)
// 输出错误信息
if err != nil {
log.Println(err.Error())
panic(err.Error())
}基本配置完成 修改后完整main.go如下
package main
import (
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/logger"
"github.com/kataras/iris/v12/middleware/recover"
"io"
"log"
"myCommunity/route"
"myCommunity/utils"
"os"
"time"
)
func main() {
f := newLogFile()
defer f.Close()
app := iris.New()
// 在控制台输出同时,会被写入日志文件
app.Logger().SetOutput(io.MultiWriter(f, os.Stdout))
// 不在控制台输出 只写入日志文件
//app.Logger().SetOutput(f)
// 设置日志级别
app.Logger().SetLevel("debug")
// 添加中间件
app.Use(recover.New())
app.Use(logger.New(
logger.Config{
// 是否记录状态码,默认false
Status: true,
// 是否记录远程IP地址,默认false
IP: true,
// 是否呈现HTTP谓词,默认false
Method: true,
// 是否记录请求路径,默认true
Path: true,
// 是否开启查询追加,默认false
Query: true,
}))
app.OnErrorCode(iris.StatusNotFound, notFound)
app.OnErrorCode(iris.StatusInternalServerError, internalServerError)
// 注册静态模版
html := iris.HTML("./web/views/", ".html").Reload(true)
// 注册HTML
app.RegisterView(html)
// 注册静态资源
app.HandleDir("/assets", iris.Dir("./web/assets"))
// GET方法 返回一个 Welcome
app.Handle("GET", "/", func(ctx iris.Context) {
ctx.HTML("<h1>Welcome</h1>")
})
// 启动服务
err := app.Run(
iris.Addr(":8080"), // 地址
iris.WithCharset("UTF-8"), // 国际化
iris.WithOptimizations, // 自动优化
iris.WithoutServerError(iris.ErrServerClosed), // 忽略框架错误
)
// 输出错误信息
if err != nil {
log.Println(err.Error())
panic(err.Error())
}
}
func notFound(ctx iris.Context) {
// 出现 404 的时候,就跳转到 $views_dir/errors/404.html 模板
err := ctx.View("errors/404.html")
if err != nil {
return
}
}
func internalServerError(ctx iris.Context) {
_, err := ctx.WriteString("出现问题,请重试")
if err != nil {
return
}
}
func newLogFile() *os.File {
filename := "logs/" + time.Now().Format("20060102") + ".log"
// 打开以当前日期为文件名的文件(不存在则创建文件,存在则追加内容)
f, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
panic(err)
}
return f
}前端模板选择
感谢:https://www.yanshisan.cn/
开源代码地址:https://gitee.com/yssgit/yan_shisan_blog_template
本项目用到模板中 博客、留言、日记、友链模块
将源代码下载下来 将html 和静态文件进行拆分结构如下
web
|-assets
| |-css
| |-font
| |-font-awesome
| |-image
| |-js
| |-layui
|-views
| |-errors
| |-public差不多这样 下一篇开始根据前端模板创建数据库和结构体
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。