core

module
v0.0.0-...-9b971e3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 19, 2022 License: Apache-2.0

README

core

介绍

Golang快速开发的脚手架(完善中...将会把自动生成代码单独立一个工程)

架构
  • golang 1.17
  • Web框架:gin ginrpc
  • ORM框架:zorm
  • 数据库:PostgreSQL 11
  • 缓存:Redis
  • 消息队列:NSQ
  • 邮件:gomail
  • 文件存储:AliOSS
安装教程
mkdir project_name

cd project_name

go mod init *** yourself project module name ***

go get gitee.com/gosineplus/core

···
按照下方 文件模版 创建目录和文件
···

go mod tidy
文件模版

main.go

package main

import (
	"context"
	"flag"
	"fmt"

	"gitee.com/gosineplus/core/cache"
	"gitee.com/gosineplus/core/config"
	"gitee.com/gosineplus/core/ginext"
	"gitee.com/gosineplus/core/logger"
	"gitee.com/gosineplus/core/mq"
	"*** yourself project module name ***/app"

	xTools "gitee.com/gosineplus/core/app/tools/apis"
	"gitee.com/gosineplus/core/gen"
	"github.com/xxjwxc/ginrpc"
)

func main() {
	// 读取启动参数
	var configPath string
	flag.StringVar(&configPath, "c", "./app.yaml", "配置文件路径, 默认 ./app.yaml")
	flag.Parse()

	config.LoadConfigInfo(configPath)          // 加载配置文件
	logger.Init()                              // 初始化日志
	ginext.InitDB()                            // 初始化数据库
	cache.NewRedisClient(context.Background()) // 初始化缓存
	mq.Init(app.GetConsumers())                // 初始化消息队列

	// 初始化gin
	g := ginext.GinEngine(config.GLOBAL.App.Mode)
	g.Use(ginext.AppInterceptor())
	g.Use(ginext.GinRecovery())

	// 代码生成API
	if config.GLOBAL.App.Mode == "debug" {
		g.POST("/gen/exec", gen.GenExec)
	}
	// 通用工具API
	g.POST("/tools/oss/getStsToken", xTools.OssGetStsToken)
	g.POST("/tools/oss/getTempUrl", xTools.OssGetTempUrl)
	// 业务API
	apis := app.GetRouters()
	for _, api := range apis {
		g.POST(api.Key+"/*path", router.AutoRoute(api.Router))
	}

	// 启动应用
	g.Run(fmt.Sprintf(":%d", config.GLOBAL.App.Port))
}

app.yaml

# 服务器配置
app:
  name: your app name
  module: *** yourself project module name ***
  port: 5678
  # 可选值: debug | test | release
  mode: debug

# 16位aes密钥
secret:
  key: ******

# 日志
log:
  file: ./logs/app.log
  level: debug # release模式下设置为: info

# 数据库
database:
  master: # 主库(写)
    host: xxx.xxx.xxx.xxx
    port: 5432
    user: postgres
    password: xxxxxxxx
    db: xxx
  slave: # 从库(读)
    host: xxx.xxx.xxx.xxx
    port: 5432
    user: postgres
    password: xxxxxxxx
    db: xxx

# 缓存
cache:
  host: xxx.xxx.xxx.xxx:6379 # 集群地址以,分隔
  password: xxxxxxxx

# 消息队列
mq:
  nsqd: xxx.xxx.xxx.xxx:4150 # tcp连接地址, 多个地址以,分隔

# 权限密钥
jwt:
  key: xxxxxxxxxxxxxxxx
  expires: 180 # 3小时
  excludes:
    - /account/signin

# OSS配置
oss:
  region: cn-beijing
  id: xxxxxxxxxxx # AppKeyID
  secret: xxxxxxxxxxxxxxxx # AppKeySecret
  arn: acs:ram::xxxxxxxxxx:role/xxxxxx # RoleARN
  session: xxx #SessionName
  bucket: xxxxxx # BucketName
  domain: # 自有域名(可为空)

# 邮件服务器配置
email:
  smtp: smtp.xxx.com
  port: 465
  username: xxxxxx@xxx.com
  password: xxxxxxxx
  alias: xxx

app/api_router.go

// Code generated by GoSine+. DO NOT EDIT.
package app

// RouterInfo 路由信息
type RouterInfo struct {
	Key    string
	Router interface{}
}

// 注册路由
func GetRouters() []RouterInfo {
	return []RouterInfo{}
}

app/mq_consumer.go

package app

import (
	"gitee.com/gosineplus/core/mq"
)

// 注册消息队列的消费者
func GetConsumers() []mq.Consumer {
	return []mq.Consumer{}
}

Directories

Path Synopsis
app
gen

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL