Git Product home page Git Product logo

goapp's Introduction

功能说明

  • 一个简易的mvc框架
  • 中间件路由用的gin
  • 利用反射把网址映射到controller的方法
  • 核心代码放在了core包里面,core包里面引用第三方库代码,业务代码只需用core包,从而隔离业务代码与第三方包
  • 支持多业务线,每个业务线多个应用,分本地、测试线、正式线三个环境
  • 带有.gitlab-ci.yml样例文件,可以结合gitlab runner实现gitlab上的CI/CD流程

框架结构

goapp                           
├─ core    //核心包                 
├─ business_1    //业务1文件夹                 
│  ├─ config  
│  │  ├─ config-dev.yaml                      
│  │  ├─ config-local.yaml                    
│  │  └─ config-prod.yaml
│  ├─ entrance  
│  │  ├─ app_1.go     //业务1下的应用1                        
│  │  ├─ app_2.go     //业务1下的应用2               
│  │  └─ app_3.go     //业务1下的应用3 
│  └─ database
│  └─ controller
│  └─ service                                 
│  └─ template   
│  └─ app_1.exe  // 业务1下的应用1编译后可执行文件,该文件不入代码库git,本地测试可以执行这个                          
│  └─ app_2.exe  // 业务1下的应用2编译后可执行文件,该文件不入代码库git,本地测试可以执行这个                          
│  └─ app_3.exe  // 业务1下的应用3编译后可执行文件,该文件不入代码库git,本地测试可以执行这个                          
│
├─ business_2    //业务2文件夹                 
│  ├─ config  
│  │  ├─ config-dev.yaml                      
│  │  ├─ config-local.yaml                    
│  │  └─ config-prod.yaml
│  ├─ entrance  
│  │  ├─ app_1.go     //业务2下的应用1                        
│  │  ├─ app_2.go     //业务2下的应用2               
│  │  └─ app_3.go     //业务2下的应用3 
│  └─ database
│  └─ controller
│  └─ service                                 
│  └─ template   
│  └─ app_1.exe  // 业务2下的应用1编译后可执行文件,该文件不入代码库git,本地测试可以执行这个                          
│  └─ app_2.exe  // 业务2下的应用2编译后可执行文件,该文件不入代码库git,本地测试可以执行这个                          
│  └─ app_3.exe  // 业务2下的应用3编译后可执行文件,该文件不入代码库git,本地测试可以执行这个  
├─ .gitignore    
├─ .gitlab-ci.yml                      
├─ go.mod                   
├─ go.sum                                   
└─ README.md

环境搭建

运行本框架需要搭建一个1.14版本的go环境,编辑器使用建议用goland最新版。搭建步骤如下

1. 按照官网安装golang语言包,并加入环境变量,在命令行输入`go version`能显示出来go版本表示安装完毕
2. 申请本项目的gitlab权限,执行`git clone [email protected]:mingxing/goapp.git`下载下来项目代码
3. 命令行进入项目代码的goapp文件夹,在命令行执行以下四个个命令
4. `go env -w GO111MODULE=on`设置module模式
5. `go env -w GOPROXY=https://goproxy.cn,direct`设置国内包镜像
6. `go env -w GOPRIVATE=gitlab.leju.com`设置私有库
7. 设置git拉取方式为ssh,根据不同操作系统输入命令,windows系统执行`git config --global url."[email protected]:".insteadof "https://gitlab.leju.com/"`,mac系统执行`git config --global [email protected]:.insteadOf https://gitlab.leju.com/`
8. 执行`go mod tidy`拉取代码库中的包
9. 以上流程若能顺利走完,则环境搭建完毕了

应用部署流程

  1. 写好代码后,确定自己的业务名和应用名,业务名取文件夹名字,应用名取入口文件名字,修改.gitlab-ci.yml文件中的BIZ_NAME(业务名)、EXE_NAME(应用名)
  2. commit并打上标签,标签规则如下:
测试线分支develop,打标签才会执行自动编译、部署,标签必须以ci-dev开头并加上业务、应用名字,例如ci-dev.goodhouse.consume.0.0.1
正式线分支master,打标签才会执行自动编译、部署,标签必须以ci-prod开头并加上业务、应用名字,例如ci-prod.goodhouse.consume.0.0.1
  1. push之后会自动编译部署,可以去gitlab查看进度
  2. 以上步骤都没问题之后,需要去cesi重启应用

应用创建流程

  1. 按照demo创建文件夹、文件,写代码
  2. 按照上面的部署流程去部署
  3. 需要告知运维该新应用的业务名和应用名,运维会将新应用加到Cesi里面,然后正常开启应用就好了

情况1. 若是该应用不需要对外访问如cron任务等,则到此为止就好了

情况2. 若是该应用需要对外访问但是不用负载均衡,如pprof查看性能,则可以按照如下方式访问:

正式线:https://正式线域名/{IP地址}/{端口}/{URI}
测试线:https://测试线域名/{IP地址}/{端口}/{URI}

情况3. 若是该应用需要对外访问且用负载均衡,需要让运维增加配置nginx:

假如业务是goodhouse应用是web
1.增加upstream
upstream goapp_goodhouse_web {
        server 127.0.0.1:9002  ;
        server 127.0.0.1:8002  ;
    }
2.增加location
location ^~ /goodhouse/web {
    if ($request_uri ~* "/goodhouse/web/(.*)") {
        set $req $1;
    }
    proxy_pass http://goapp_goodhouse_web/$req;
    proxy_redirect     off;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}
3.配置完之后可以通过以下网址访问
正式线:https://正式线域名/goodhouse/web/{URI}
测试线:https://测试线域名/goodhouse/web/{URI}

代码规范

代码规范参考https://github.com/xxjwxc/uber_go_guide_cn ,下面做一点补充

  1. import 分组,按照标准库、其他库、本地包顺序
import (
	"crypto/md5"
	"fmt"
	"time"

	"github.com/jinzhu/now"
	"github.com/kataras/iris/v12"
	"github.com/kataras/iris/v12/mvc"

	"github.com/renjingneng/a_simple_go_project/core/config"
	"github.com/renjingneng/a_simple_go_project/middleware"
	commonService "github.com/renjingneng/a_simple_go_project/service"
	service "github.com/renjingneng/a_simple_go_project/service/identify"
)
  1. 文件注释模板
// @Description  统一json返回、统一错误情况下的模板返回
// @Author  renjingneng
// @CreateTime  2020/8/18 10:49
  1. 方法注释模板
// InitApp 初始化参数apptype、whitelist
//
// @Author  renjingneng
//
// @CreateTime  2020/8/15 16:23
func InitApp(ctx iris.Context) {
	path := ctx.Path()
	pathSlice := strings.Split(path, "/")
	apptype := pathSlice[1]
	whitelist := config.GetMap(utility.ToCamel(apptype)+"Whitelist")
	ctx.Values().Set("apptype", apptype)
	ctx.Values().Set("whitelist", whitelist)
	ctx.Next()
}

goapp's People

Contributors

renjingneng avatar

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.