本文是基于iris 12 扩展编写的类似eggjs框架结构。这里就简单介绍一下什么是iris,iris主要侧重于Web开发,提供了Web开发的一系列功能组件,基于MVC开发模式。如果你想直接开始,请点击stencil-go

因为我本人之前写nodejs比较多,所以在学习go的时候就找到iris这个框架,毕竟它的关于里面就有一句A true successor of expressjs and laravel😄。有了框架之后就得约束一下结构不是,不然大家都随心所欲的写就很混乱了,所以我就参照了eggjs的结构进行设计。(当然这只是我个人的想法,毕竟这也才是我的入门项目,多有不足,还请指教( ´▽`)

基础功能

目录结构

这里就简单介绍下目录约定规范

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
stencil-go
├── README.md
├── app
│ ├── bindata
│ ├── controller
│ ├── core
│ ├── extend(可选)
│ ├── middleware(可选)
│ ├── model
│ ├── router
│ └── service(可选)
├── build_linux.sh
├── build_win64.bat
├── config
│ ├── config.default.yaml
│ └── config.prod.yaml
├── config.yml(可选)
├── go.mod
├── main.go
├── output
│ ├── logs (日志目录)
│ └── stencil-go (可执行二进制文件)
└── public(可选)
├── css
├── index.html
└── js

  • app/bindata/** 用于打包配置文件为二进制文件,具体参见bindata
  • app/controller/** 用于解析用户的输入,处理后返回相应的结果
  • app/core/** 用于解析各种非常但又必须的方法,例如读取配置、初始化日志等
  • app/extend/** 用于框架的扩展,可选
  • app/middleware/** 用于编写中间件,可选
  • app/model/** 用于编写模型文件
  • app/router/** 用于配置 URL 路由规则
  • app/service/** 用于编写业务逻辑层,可选,建议使用
  • build_* 由于构建对应平台的二进制文件
  • config/config.{env}.js 用于编写配置文件
  • config.yml mysql数据库转 struct 工具,可选 ( gormt配置文件
  • main.go 入口文件,用于加载配置并启动服务
  • public/** 用于放置静态资源,可选
  • output/** 用于放置日志等生成的文件

go 指令

清除模块缓存$GOPATH/pkg/mod

1
go clean --modcache

安装打包器 go-bindata

go-bindata -pkg <指定包名> -o <目标输出文件,可包含路径> <源文件,可包含路径>

1
2
go get -u github.com/go-bindata/go-bindata/v3/go-bindata
go-bindata -h

go-bindata如果不在环境变量中需要手动配置。在~/.bash_profile中添加以下行:

1
2
## golang
export PATH=~/go/bin:$PATH

mysql数据库转 struct 工具 gormt

需要修改根目录下的config.yml

1
2
3
go get -u -v github.com/xxjwxc/gormt@master
gormt -h
gormt

⚠️修改配置文件后,需要运行打包命令使配置生效

1
go-bindata -pkg config_data -o app/bindata/config/config_data.go config/...

本地https测试 mkcert

1
2
mkcert -install
mkcert local.cn "*.local.cn" localhost 127.0.0.1 ::1

常见问题

go: updates to go.mod needed, disabled by -mod=readonly : packages.Load error

1
go mod tidy

参考文档