Coder Social home page Coder Social logo

zhuyu / apiproject Goto Github PK

View Code? Open in Web Editor NEW

This project forked from wangshibiaoflytiger/apiproject

3.0 1.0 1.0 6.64 MB

golang项目开发脚手架,集成最佳实践(gin+gorm+go-redis+mongo+cors+jwt+json日志库zap(支持日志收集到kafka或mongo)+消息队列kafka+微信支付宝支付gopay+api加密+api反向代理+go modules依赖管理+headless爬虫chromedp+makefile+二进制压缩+livereload热加载)

Makefile 0.98% Go 97.65% HTML 0.40% TSQL 0.98%

apiproject's Introduction

项目原始仓库地址: https://github.com/wangshibiaoFlytiger/apiproject
#若本项目给您带来收获, 还请您动动小拇指,右上角给点个赞哈,万分感谢哈哈!!!

一. 工程创建
mkdir ./apiproject
cd ./apiproject
go mod init apiproject
go build

二. 集成gin web框架
go get github.com/gin-gonic/gin
go get github.com/go-sql-driver/mysql
go get github.com/jinzhu/gorm

三. 项目规范
1. 包名追加前缀
model层: m_
dao层: d_
service层: s_
controller层: c_

2. 所有的类
每一层的文件名或类名以所属层为后缀, model层例外

四. 测试代码
执行单元测试, 需要进入test目录, 然后执行go test

五. live reload 自动编译并运行
go get -u github.com/cosmtrek/air
项目根目录创建liveReload.conf文件:
    编辑配置项bin,full_bin,exclude_file(将rice-box.go移除)
执行命令 air -c ./liveReload.conf

六. 集成自动测试框架goconvey
go get github.com/smartystreets/goconvey

七. 支持跨域
go get github.com/gin-contrib/cors
此外还需要如下显示指定ugorji/go的版本, 使用v1.1.2版本,最新版本会出现包冲突错误:cannot load github.com/ugorji/go/codec: ambiguous import: found github.com/ugorji/go/codec in multiple modules
go get github.com/ugorji/[email protected]

八. 指定运行环境
通过指定命令行参数--profile参数来加载对应的配置文件, 取值范围:dev,test,pro.
可通过执行帮助命令查看./apiproject help

九. 打包静态文件到可执行文件
go get github.com/GeertJohan/go.rice/...
//执行go build之前, 执行如下命令, 将项目中所有引用rice.MustFindBox或rice.FindBox的所属文件路径, 作为--import-path的参数
rice -v --import-path "./router" --import-path "./config"  embed-go
注意事项:
    rice.MustFindBox的路径参数不能为绝对路径, 且必须为字符串字面量, 不能为字符串变量
    最终的静态文件路径不能以./开头, 否则报错, 如错误写法box.MustBytes("./config_dev.ini"), 正确写法box.MustBytes("config_dev.ini")
    每次修改相应的静态文件, 记得随时执行rice命令, 否则会导致程序读取的文件内容不是最新的
把box理解为目录即可

十. 压缩可执行文件
1. go build增加如下编译参数
-ldflags "-s -w"
2. 使用压缩工具, 如upx
下载地址:https://github.com/upx/upx/releases
upx --brute 可执行文件路径

十一. git分支约定
1. master分支放通用功能, 目标是打造成1个通用框架
2. 创建实际项目的操作
创建项目主分支
    git checkout -b 项目名称_master
创建针对该项目的分支
    git checkout 项目名称_master
    git checkout -b 项目名称_branch_当前时间
合并项目分支到项目主分支
    git checkout 项目名称_master
    合并项目分支到项目主分支
合并通用框架的递增功能到项目分支(可以作为通用的功能一定要在master分支中开发)

十二. 分布式ID生成库
go get github.com/bwmarrin/snowflake

十三. kafka消息队列
confluent-kafka-go在后期使用过程中, kafka服务端报未知异常, 故舍弃该客户端, 改用sarama

十四. 纯真ip归属地查询
1. 直接执行如下命令会提示安装失败: malformed module path "github.com/kayon/iploc/...": double dot
经实践, 顺序执行如下2个命令即可完成安装, 原因未知
go get -u github.com/kayon/iploc/
go get -u github.com/kayon/iploc/...
2. 下载纯真数据库文件
iploc-fetch qqwry.gbk.dat
3. 转换为 UTF-8
iploc-conv -s qqwry.gbk.dat -d qqwry.utf8.dat

apiproject's People

Contributors

wangshibiaoflytiger avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Forkers

rejianonline

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.