关于golang:搞一个自娱自乐的社区二-架构搭建

59次阅读

共计 3550 个字符,预计需要花费 9 分钟才能阅读完成。

搭建基础架构

目录构造

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

差不多这样 下一篇开始依据前端模板创立数据库和构造体

正文完
 0