前期准备、构思已经相对比较完善了,我们在构思章节中,已经明确了我们的需求,知道我们的博客他需要有些什么功能,博客的数据库设计、博客的界面设计等信息。也大致了解到了golang的安装配置、基本语法等。

这一节内容中,我们将开始进行我们最重要的一步,开始实战学习golang了。

目录结构

一个清晰明确的目录结构,可以让项目更清晰,更好维护和扩展。目录结构的组织,也是可以灵活变动的。它本身没有一个严格规定的格式。我们只需要做到合适、合理、清晰就可以。下面是我对博客程序设计的目录结构的设计。目录都采用一级目录形式放置,目录名称采用对应功能的英文来命名。

├── main          入口文件目录
├── cache         缓存目录
├── config        配置文件处理目录
├── controller    控制器目录
├── library       一些功能函数存放目录
├── middleware    中间件存放目录
├── model         数据库模型文件存放的目录
├── provider      控制器和数据库交互读写的中间层处理函数目录
├── public        对外公开的目录
├── request       前端页面提交的数据模型定义目录
├── route         路由器存放目录
└── template      页面模板文件目录

创建完成后的目录结构大概是这样: 

directory

  • 根目录就是用来放置上面这些文件夹的目录,包括项目配置文件等。
  • main目录是博客网站项目入口目录,将main.go放置在这个位置,编译的时候,也是通过这个目录编译。
  • cache目录是博客网站项目的缓存目录,生成的文件缓存,都会放置在这里
  • config目录是博客网站项目的配置文件处理目录,里面放配置的初始化和读写等函数
  • controller目录是博客网站项目的控制器目录,所有的控制器都放置在这里
  • library目录是博客网站项目的一些功能函数存放目录
  • middleware目录是博客网站项目的中间件存放目录
  • model博客网站项目的数据库模型文件存放的目录
  • provider目录是博客网站项目控制器和数据库交互读写的中间层处理函数存放目录
  • public目录是博客网站项目对外公开的目录,放置一些静态文件可供直接浏览,如js、css、images等
  • request目录是博客网站项目前端页面提交的数据模型定义目录,规定了前端提交的数据字段和数据格式
  • route目录是博客网站项目的路由器存放目录,定义了博客有哪些路径是暴露出来提供访问的
  • template目录是博客网站项目的页面模板文件目录,每一个控制器对应一个文件夹和文件

项目初始化

上面我们已经创建好目录了,接着,我们就开始使用golang的包管理命令来初始化我们的项目。现在新版的golang,使用go mod 命令来初始化项目和管理依赖。

避坑说明:如果你的安装的golang版本低于1.13,那么请先升级到1.13,以方便后续的操作。更高版本有更多的特性支持。如果你将项目创建在了pkg目录,那么使用go mod命令管理默认是会出错的,我们需要执行一条命令解决这个冲突,让他允许这么操作

go env -w GO111MODULE=on

还有众所周知的原因,我们并不能直接访问到golang官网,导致一些官方包无法正常下载,我们还需要再执行一个命令,来设置代理地址。

go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct

有了这2步的前提操作,下面就可以放心大胆的使用了。

初始化项目

go mod init irisweb

go mod init 项目名称 就可以初始化一个指定项目名称的golang项目。比如这里我们这里将项目命名为irisweb。 init

载模块包到本地cache

目前所有模块版本数据均缓存在 $GOPATH/pkg/mod和 ​$GOPATH/pkg/sum 下。不过一般上这个命令可以不用,直接使用go mod tidy 也是可以的。

go mod download

删除错误或者不使用的模块包,更新下载未下载的模块包

这个命令可以将多余的包删除掉,并且会自动下载新添加的包

go mod tidy

生成vendor目录

包下载下来了,还需要生成到vendor目录,才能正确的引入和编译,否则是会报错的。

go mod vendor

其他包管理命令

# 编辑go.mod文件 选项有-json、-require和-exclude,可以使用帮助go help mod edit
go mod edit
# 以文本模式打印模块需求图
go mod graph
# 验证依赖是否正确
go mod verify
# 查找依赖
go mod why
# 更新到最新版本
go get gorm.io/gorm@version
# 清理moudle 缓存
go clean -modcache
# 替代只能翻墙下载的库
go mod edit -replace=golang.org/x/sys@v0.0.0=github.com/golang/sys@latest
# 查看可下载版本
go list -m -versions gorm.io/gorm

完整的项目示例代码托管在GitHub上,需要查看完整的项目代码可以到github.com/fesiong/goblog 上查看,也可以直接fork一份来在上面做修改。