百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

一套简洁、优雅的Golang Web开发框架

ccwgpt 2024-10-08 01:03 26 浏览 0 评论

tmaic 是一套简洁、优雅的Golang Web开发框架(GoLang Web Framework)。支持mysql,mssql等多类型数据库,它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络应用,而且每行代码都可以简洁、富于表达力。

数据模型

以下是例子


package models

import (
	"github.com/pangxianfei/framework/helpers/m"
	"github.com/pangxianfei/framework/helpers/ptr"
	"github.com/pangxianfei/framework/helpers/zone"
	"github.com/pangxianfei/framework/model"
)
type User struct {
    model.BaseModel
    ID        *uint      `gorm:"column:user_id;primary_key;auto_increment"`
    Name      *string    `gorm:"column:user_name;type:varchar(100)"`
    Email     *string    `gorm:"column:user_email;type:varchar(100);unique_index;not null"`
    Password  *string    `gorm:"column:user_password;type:varchar(100);not null"`
    CreatedAt *zone.Time `gorm:"column:user_created_at"`
    UpdatedAt zone.Time  `gorm:"column:user_updated_at"`
    DeletedAt *zone.Time `gorm:"column:user_deleted_at"`
}

func (user *User) TableName() string {
    return user.SetTableName("user")
}

func (user *User) SetNameAttribute(value interface{}) {
    user.Name = user.Email
}

func (user *User) GetUpdatedAtAttribute(value interface{}) interface{} {
    return user.UpdatedAt //查询后这里可以其他处理,如格式化处理,如果是时间time 可以格式成 2020-10-01 18:00:20
}

生成公钥文件

tmaic.CreateRsaKey()

系统函数

加密解密函数

公钥加密

s,_:= tmaic.Encryption("Golang使用RSA进行公钥加密私钥解密,私钥加密公钥解密的实现")

私钥解密

dd,_ := tmaic.Decrypt(s)

私钥加密

s,_:= tmaic.PrivateEncryption("Golang使用RSA进行公钥加密私钥解密,私钥加密公钥解密的实现")

公钥解密

dd,_ := tmaic.PublicDecrypt(s)

校验密码是否正确

user.Password:用户密码(已加密)

requestData.Password:要校验的密码(明文)

if !crypt.BcryptCheck(user.Password, requestData.Password) error{
    
    return "返回提示信息"
}

注意事项:如果要使用 NSQ 队列的,不用将包注释

导入包:

"github.com/pangxianfei/framework/queue"

"tmaic/app/events"

"tmaic/app/jobs"

"tmaic/app/listeners"

以下去掉注释即可:

//queue.Initialize()

//jobs.Initialize()

//events.Initialize()

//listeners.Initialize()

NSQ安装请参考:https://nsq.io/overview/quick_start.html

nsq启动

1.nsqlookupd

2.nsqd --lookupd-tcp-address=127.0.0.1:4160

3.nsqadmin --lookupd-http-address=127.0.0.1:4161

执行以上命令后:http://127.0.0.1:4171 可查看监控台

队列demo (test)

*** 详情见工程项目下

入列(我们常说的写入 topic,生产者),以下写入topic例子


	test := events.Test{}

	testparam := &pbs.Test{
		Id: uint32(userId),
	}
	test.SetParam(testparam)

	if errs := hub.Emit(&test); errs != nil {
		log.Info("user test", tmaic.Output{"event": test, "errors": errs})
	}

出列(启动一个观察者)

 
 
func init() {
	hub.Register(&Test{})
}

type Test struct {
	user models.User
	hub.Listen
}

func (user *Test) Name() hub.ListenerName {
	return "add-test" //监听器名称 后面我们会用到
}

func (user *Test) Subscribe() (eventPtrList []hub.Eventer) {
	log.Debug("Subscribe-test")
	return []hub.Eventer{
		&events.Test{},
	}

}

func (user *Test) Construct(paramPtr proto.Message) error {
	/** 第一执行这里
	  业务代码
	*/
	log.Debug("Construct-test")
	return nil
}
func (user *Test) Handle() error {
	/**第二执行这里
	 最终实现业务逻辑 :比如发邮件、消息推送、短信通知等 这些业务通常封装在 service 层,这里只是建议
	*/
	
	// 更新
	t := users.UserService.Get(cast.ToInt64(user.ID))
	t.Email = user.Email //test 其实没有这个字段 根据需要自行组织
	t.Name = user.Name   //test 其实没有这个字段 根据需要自行组织
	_ = users.UserService.Update(t)
	
	log.Debug("Handle-test")
	return nil
}

实现消费,在根目录与main.go同级,

go run artisan.go queue:listen test-add //test-add 是Name() 返回的 配合supervisor进程守护

类型转化助手

ToInt64

cast.ToInt64()

ToInt32

cast.ToInt32()

ToFloat32

cast.ToFloat32()

更多方法 查看cast包

打印

tmaic.Dump(mugs)

    mugs := map[string]interface{} {
        "password2" : map[string]string {
        "password3" : "The name cannot be empty",
        },
    }
    
    //效果
    {
        "password2": {
            "password3": "The name cannot be empty"
        }
    }
    

性能测试

虚拟机环境下:

压力测试

ab -c 1000 -n 5000 -k http://127.0.0.1/all

安装教程

  1. git clone git@gitee.com:pangxianfei/tmaic.git
  2. go mod init // 初始化go mod 包管理
  3. go mod tidy // 加载依赖包
  4. go mod vendor // 将依赖包拷贝到项目目录中去
  5. go run main.go

相关推荐

2025南通中考作文解读之四:结构框架

文题《继续走,迈向远方》结构框架:清晰叙事,层层递进示例结构:1.开头(点题):用环境描写或比喻引出“走”与“远方”,如“人生如一条长路,每一次驻足后,都需要继续走,才能看见更美的风景”。2.中间...

高中数学的知识框架(高中数学知识框架图第三章)

高中数学的知识框架可以划分为多个核心板块,每个板块包含具体的知识点与内容,以下为详细的知识框架结构:基础知识1.集合与逻辑用语:涵盖集合的概念、表示方式、性质、运算,以及命题、四种命题关系、充分条件...

决定人生的六大框架(决定人生的要素)

45岁的自己混到今天,其实是失败的,要是早点意识到影响人生的六大框架,也不至于今天的模样啊!排第一的是环境,不是有句话叫人是环境的产物,身边的环境包括身边的人和事,这些都会对一个人产生深远的影响。其次...

2023年想考过一级造价师土建计量,看这30个知识点(三)

第二章工程构造考点一:工业建筑分类[考频分析]★★★1.按厂房层数分:(1)单层厂房;(2)多层厂房;(3)混合层数厂房。2.按工业建筑用途分:(1)生产厂房;(2)生产辅助厂房;(3)动力用厂房;(...

一级建造师习题集-建筑工程实务(第一章-第二节-2)

建筑工程管理与实务题库(章节练习)第一章建筑工程技术第二节结构设计与构造二、结构设计1.常见建筑结构体系中,适用建筑高度最小的是()。A.框架结构体系B.剪力墙结构体系C.框架-剪力墙结构体系D...

冷眼读书丨多塔斜拉桥,这么美又这么牛

”重大交通基础设施的建设是国民经济和社会发展的先导,是交通运输行业新技术集中应用与创新的综合体现。多塔斜拉桥因跨越能力强、地形适应性强、造型优美等特点,备受桥梁设计者的青睐,在未来跨越海峡工程中将得...

2021一级造价师土建计量知识点:民用建筑分类

2021造价考试备考开始了,学霸君为大家整理了一级造价师备考所用的知识点,希望对大家的备考道路上有所帮助。  民用建筑分类  一、按层数和高度分  1.住宅建筑按层数分类:1~3层为低层住宅,4~6层...

6个建筑结构常见类型,你都知道吗?

建筑结构是建筑物中支承荷载(作用)起骨架作用的体系。结构是由构件组成的。构件有拉(压)杆、梁、板、柱、拱、壳、薄膜、索、基础等。常见的建筑结构类型有6种:砖混结构、砖木结构、框架结构、钢筋混凝土结构、...

框架结构设计经验总结(框架结构设计应注意哪些问题)

1.结构设计说明主要是设计依据,抗震等级,人防等级,地基情况及承载力,防潮抗渗做法,活荷载值,材料等级,施工中的注意事项,选用详图,通用详图或节点,以及在施工图中未画出而通过说明来表达的信息。2.各...

浅谈混凝土框架结构设计(混凝土框架结构设计主要内容)

浅谈混凝土框架结构设计 摘要:结构设计是个系统的全面的工作,需要扎实的理论知识功底,灵活创新的思维和严肃认真负责的工作态度。钢筋混凝土框架结构虽然相对简单,但设计中仍有很多需要注意的问题。本文针...

2022一级建造师《建筑实务》1A412020 结构设计 精细考点整理

历年真题分布统计1A412021常用建筑结构体系和应用一、混合结构体系【2012-3】指楼盖和屋盖采用钢筋混凝土或钢木结构,而墙和柱采用砌体结构建造的房屋,大多用在住宅、办公楼、教学楼建筑中。优点:...

破土动工!这个故宫“分院”科技含量有点儿高

故宫“分院”设计图。受访者供图近日,位于北京海淀区西北旺镇的故宫北院区项目已开始破土动工,该项目也被称作故宫“分院”,筹备近十年之久。据悉,故宫本院每年展览文物的数量不到1万件,但是“分院”建成后,预...

装配式结构体系介绍(上)(装配式结构如何设计)

PC构件深化、构件之间连接节点做法等与相应装配式结构体系密切相关。本节列举目前常见的几种装配式结构体系:装配整体式混凝土剪力墙结构体系、装配整体式混凝土框架结构体系、装配整体式混凝土空腔结构体系(S...

这些不是双向抗侧结构体系(这些不是双向抗侧结构体系的特点)

双向抗侧土木吧规范对双向抗恻力结构有何规定?为何不应采用单向有墙的结构?双向抗侧土木吧1.规范对双向抗侧力结构体系的要求抗侧力体系是指抵抗水平地震作用及风荷载的结构体系。对于结构体系的布置,规范针对...

2022一级建造师《建筑实务》1A412020 结构设计 精细化考点整理

1A412021常用建筑结构体系和应用一、混合结构体系【2012-3】指楼盖和屋盖采用钢筋混凝土或钢木结构,而墙和柱采用砌体结构建造的房屋,大多用在住宅、办公楼、教学楼建筑中。优点:抗压强度高,造价...

取消回复欢迎 发表评论: