用 Go 开发终端接口服务--准备项目所需的 Go 类包
我们选择第三方类包,主要是为了方便快速开发,把主要精力放在业务流程上,为了避免走弯路,我们坚持选择稳定、符合 Go 语言哲学、开发团队活跃的类包作为优先选包原则。下面将罗列我们项目用到的第三方类包,并简单说明用途和特征。
github.com/codegangsta/gin
**gin 用途**:开发环境自动热编译部署工具,方便开发使用,只需启动一次,代码一旦有变动,gin 都会自动增量编译,省去每次修改代码都要手动重启的麻烦,需全局安装。
github.com/golang/dep
**dep 用途**:Go 的依赖管理工具,类似 Java 界的 Maven,它可以让项目依赖某个版本的第三方库,把第三方库文件都集中下载在根目录 vendor 文件夹里,需全局安装。
gitub.com/urfave/negroni
**negroni 用途**: 非常 nice 非常地道的 Http 类包,它扩展了 Go 内置 `net/http` Handlers 处理器,它继承了 Go web 开发所推崇的方式,我们整个项目都是基于 negroni 做项目骨架结构的。
github.com/go-sql-driver/mysql
**go-sql-driver 用途**:MySQL 数据库驱动类包,连接 MySQL 数据库必备的库。
github.com/jmoiron/sqlx
**sqlx 用途**:轻量的 SQL 操作类包,开发者出自于大猩猩团队成员的,特点是轻量,高性能,可扩展,它很巧妙地扩展了 Go 内置 database/sql 库所没有的东西,熟悉 database/sql 的同学,再用 sqlx 就如鱼得水。
github.com/elgris/sqrl
**sqrl 用途**:生成动态 SQL 语句类包,它是 squirrel 的一个分支,着重去掉了线程同步的特点,优化了性能,像使用 ORM 一样生成 sql 语句和对应参数,对条件判断的数据访问,特别有用。它和 sqlx 是绝配。
github.com/unrolled/render
**render 用途**:Web 响应输出 JSON、HTML、XML、TEXT 绝佳的类包,服务接口快速输出 JSON 必不可少的。
github.com/robfig/config
**config 用途**:配置文件读写类包,项目配置一些可变的关键参数,需要写在程序外面,这时需要它读取配置文件的属性,传递给程序,也可以多个配置文件读取再写入合并文件,非常方面快捷的第三方库。
github.com/sirupsen/logrus
**logrus 用途**:功能完善的分级别日志类包,可以定制格式和属性,打印一些错误信息和调试信息。
github.com/disintegration/imaging
**imaging 用途**:图片处理类包,它可以缩放,裁剪,反转,压缩图片,改变图片模式等,它让图片处理工作变得异常方便,省去写一堆复杂的算法程序。
以上列出的类包,都是项目业务用到的,除了 gin 和 dep,其他推荐使用 dep 方式安装。dep 的使用,也是很简单的,下面列出需要掌握的基本指令:
这种 dep 安装方式和 go get 全局安装有点区别,全局安装文件都安装在 GOPATH 里的,所有的项目都共享使用,而 dep 方式安装的类包,都存放在自身项目 vendor 文件夹下,只有该项目才能用,与其他项目完全隔离,互不影响。本教程除了 dep gin 我们需要全局的安装之外,其他的包都建议使用了 dep 方式安装。
小结
github.com/codegangsta/gin
**gin 用途**:开发环境自动热编译部署工具,方便开发使用,只需启动一次,代码一旦有变动,gin 都会自动增量编译,省去每次修改代码都要手动重启的麻烦,需全局安装。
github.com/golang/dep
**dep 用途**:Go 的依赖管理工具,类似 Java 界的 Maven,它可以让项目依赖某个版本的第三方库,把第三方库文件都集中下载在根目录 vendor 文件夹里,需全局安装。
gitub.com/urfave/negroni
**negroni 用途**: 非常 nice 非常地道的 Http 类包,它扩展了 Go 内置 `net/http` Handlers 处理器,它继承了 Go web 开发所推崇的方式,我们整个项目都是基于 negroni 做项目骨架结构的。
github.com/go-sql-driver/mysql
**go-sql-driver 用途**:MySQL 数据库驱动类包,连接 MySQL 数据库必备的库。
github.com/jmoiron/sqlx
**sqlx 用途**:轻量的 SQL 操作类包,开发者出自于大猩猩团队成员的,特点是轻量,高性能,可扩展,它很巧妙地扩展了 Go 内置 database/sql 库所没有的东西,熟悉 database/sql 的同学,再用 sqlx 就如鱼得水。
github.com/elgris/sqrl
**sqrl 用途**:生成动态 SQL 语句类包,它是 squirrel 的一个分支,着重去掉了线程同步的特点,优化了性能,像使用 ORM 一样生成 sql 语句和对应参数,对条件判断的数据访问,特别有用。它和 sqlx 是绝配。
github.com/unrolled/render
**render 用途**:Web 响应输出 JSON、HTML、XML、TEXT 绝佳的类包,服务接口快速输出 JSON 必不可少的。
github.com/robfig/config
**config 用途**:配置文件读写类包,项目配置一些可变的关键参数,需要写在程序外面,这时需要它读取配置文件的属性,传递给程序,也可以多个配置文件读取再写入合并文件,非常方面快捷的第三方库。
github.com/sirupsen/logrus
**logrus 用途**:功能完善的分级别日志类包,可以定制格式和属性,打印一些错误信息和调试信息。
github.com/disintegration/imaging
**imaging 用途**:图片处理类包,它可以缩放,裁剪,反转,压缩图片,改变图片模式等,它让图片处理工作变得异常方便,省去写一堆复杂的算法程序。
以上列出的类包,都是项目业务用到的,除了 gin 和 dep,其他推荐使用 dep 方式安装。dep 的使用,也是很简单的,下面列出需要掌握的基本指令:
# 新建了项目文件夹之后,只需要执行以下指令,即可初始化 dep,让项目通过 dep 管理。 dep init # 执行完毕,项目文件夹里多出了 Gopkg.lock Gopkg.toml vendor 两个文件和一个文件夹 # 以后项目依赖的第三方包,都会存在在 vendor 文件夹里。 # 查看 dep 的版本 dep version # 依赖管理帮助 dep help ensure # 添加一条依赖 dep ensure -add github.com/urfave/negroni # 这里 @= 参数指定的是 某个 tag dep ensure -add github.com/urfave/negroni@=1.0.0 # 添加后一定记住执行 确保 同步 dep ensure -v # 删除没有用到的 package dep prune -v
这种 dep 安装方式和 go get 全局安装有点区别,全局安装文件都安装在 GOPATH 里的,所有的项目都共享使用,而 dep 方式安装的类包,都存放在自身项目 vendor 文件夹下,只有该项目才能用,与其他项目完全隔离,互不影响。本教程除了 dep gin 我们需要全局的安装之外,其他的包都建议使用了 dep 方式安装。
小结
读者如果觉得学习阶段,没有太多的项目,没有必要使用 dep 管理第三方类包,直接使用 go get 安装,也是可以的,本身 dep 也不是强制规定,使用 dep 安装只是一个友善建议,随着你的开发经验不断增长,参与的项目越来越多,特别是遇到开发多个项目的时候,或项目依赖第三方类包的某些版本的时候,你就发现 dep 安装方式的好处来了。
《用 Go 开发终端接口服务》 目录
- 小册介绍
- 前言
- 环境搭建与开发工具选择
- Go 语言基本语法
- Go 语言编码规范
- 快速编写一个 Web 服务器
- 项目整体结构介绍
- 准备项目所需的 Go 类包
- 公共类关键函数
- 定义 model 实体层结构体
- 灵活写 dao 数据层函数
- 按需写 service 服务层逻辑
- 暴露 controller 控制层接口
- 测试已写好的接口
- 把项目部署到服务器
- 保证高性能项目的法宝
- 写在后面
哇~~~ 竟然还没有评论!