EasyGoServer

作者:林冠宏 / 指尖下的幽灵

掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8

博客:http://www.cnblogs.com/linguanh/

GitHub : https://github.com/af913337456/

联系方式 / Contact:913337456@qq.com


EasyGoServer

---- 概述

---- 脚本介绍

-------- Linux

-------- Windows

-------- Mac

---- 使用流程

---- 部分代码说明

---- 开源地址

概述

一个能够仅仅依赖你创建好的 sql 文件,就能 自动帮你生成基础服务端框架代码 的 go server 框架。包含有:

1,基础的 增删改查

2,拓展性强的API

3,客户端的数据传入 与 服务端的输出 全部依赖 struct

  • 例如你的一个输入结构体 inputStruct 设置为
 type inputStruct struct {
Id int64 `json:"id" nullTag:"1"` // nullTag==1 指明 id 必须要求在客户端传入 {"id":123}
Name string `json:"name" nullTag:"0"` // ==0 指明 name 在客户端输入的时候可以不必要
}

对应上例,客户端输入的 json : {"id":666, "name":"lgh"}

  • 当你在使用 select 的时候,你的 sql 如果是这样的: select User.id , User.age from User

    那么你的对应输出结构体 outputStruct 应该是:
 type inputStruct struct {
Id int64 `json:"id"`
Age int64 `json:"age"`
}

4,真正需要你写的代码极少,例如第三点的例子,你要写的就那么多,其中默认的 struct 会自动帮你生成


脚本介绍


根据 sql 文件,自动生成代码文件,包含有 struct.go,每张表对应生成一个包含有增删改查的基础方法文件

one_key_create_code

根据内置的 makefile 或者 .bat 编译并运行默认的 go server 程序,注意是默认的

make_server

Linux

one_key_create_code.sh

make_server.sh

Makefile

Windows

one_key_create_code.bat

make_server.bat

Mac

参照 linux 的

使用流程

1,在你的 服务器 安装 mysql 或者 mariadb

2,编写好的你的 sql 文件,可以参照我源码里面的 this.sql

3,运行步骤2编写好的 sql 文件

4,修改 sql_2_api.go 里面 main 内的 sql 文件名称

5,运行 one_key_create_code 脚本,成功后会在同级目录生成下面文件,记得刷新目录

  • struct.go,里面包含注释规范
  • 对应你 sql 文件里面的表名称生成的函数文件,格式: func_表名称.go

6,自己写好,main.go 或者 使用我提供的默认 LghSampleMain.go,在里面 添加你自己的路由

	router.HandleFunc("/insert",insert_luser_sample).Methods("POST")
router.HandleFunc("/select",select_luser_sample).Methods("GET")
router.HandleFunc("/update",update_luser_sample).Methods("POST")
router.HandleFunc("/delete",delete_luser_sample).Methods("POST")

7,配置好 conf.json 文件,我里面有例子

// Host 是绝对路径
// Port 是要被监听的端口
{
"Host": "127.0.0.1",
"Port": ":8884",
"FilePort":":8885",
"DbName":"database",
"DbUser":"root",
"DbPw":"123456",
"DbPort":"3306"
}

8,现在执行 make_server 脚本,观察控制台的输出,即可。

部分代码说明

核心的参数结构体

type LghRequest struct {
w http.ResponseWriter
r *http.Request // 标记使用,当前的方法名称
funcName string // 输入的结构体,与客户端输入的 json 成对应关系
inputStruct interface{} // 自定义 slices 的回调,方便你做参数处理,返回 true 意味着此次操作终止,例如 update
slicesCallBack func(slices []interface{}) bool // 根据传入的 jsonObj 生成的 slices 来回调,方法生成自定义 sql
getSqlCallBack func(slices []interface{},inputStruct interface{}) string
}

例子方法

1,演示不需要参数的形式

/** 演示不需要参数的形式 */
func update_0(w http.ResponseWriter,r *http.Request) {
request := LghRequest{
w,
r,
"update_luser",
nil, /** nil 表示没输入结构体 */
func(slices *[]interface{}) bool{
return false
},
func(slices *[]interface{},inputStruct interface{}) string {
return "update LUser set u_user_id='444' where id='1'"
}}
updateDataByStruct(request)
}

2,演示当有参数输入的时候,参数仅做判断,但是不需要组合到 sql 的情况

/** 演示当有参数输入的时候,参数仅做判断,但是不需要组合到 sql的情况 */
func update_1(w http.ResponseWriter,r *http.Request) {
type testS struct {
Id int64 `json:"id" nullTag:"1"` // nullTag==1 指明 id 必须要求在客户端传入 {"id":123}
}
request := LghRequest{
w,
r,
"update_luser",
new (testS),
func(slices []interface{}) bool{
// 在这里对 slices 做你想做的操作,增加或者删除等等
if slices[0] == -1{
return true /** 返回 true,终止插入,提示错误或者其它 */
}
slices = append(slices[:0], nil) /** 自己做完处理删除掉 */
return false
},
func(slices []interface{},inputStruct interface{}) string {
// 如果你想根据输入的 json 数据来特定生成 sql,那么就可以在这里使用 slices 来操作
return "update LUser set u_user_id='444' where id='2'"
}}
updateDataByStruct(request)
}

3,演示使用输入参数的情况

/** 演示使用输入参数的情况 */
func update_luser_sample(w http.ResponseWriter,r *http.Request) {
type testS struct {
Id int64 `json:"id" nullTag:"1"`
}
request := LghRequest{
w,
r,
"update_luser",
new (testS),
func(slices []interface{}) bool{
return false
},
func(slices []interface{},inputStruct interface{}) string {
return "update LUser set u_user_id='444' where id=?" /** 对应 id */
}}
updateDataByStruct(request)
}

开源地址

https://github.com/af913337456/EasyGoServer

Go 语言,开源服务端代码自动生成 框架 - EasyGoServer的更多相关文章

  1. 开源:C# 代码自动生成工具,支持站点前后台

    前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.com/supperlitt/WebAutoCodeO ...

  2. 关于,java-webservice接口,根据服务端,自动生成客户端调用时,响应时间慢

    我这边遇到的问题,是在和对方进行webservice接口交互的时候,用工具,调用对方的webservice接口,对方响应很快.但是用java生成的客户端调用就会很慢才得到响应.大概有5分钟左右. 这里 ...

  3. C# 代码自动生成工具

    开源:C# 代码自动生成工具,支持站点前后台   前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.co ...

  4. webservice 服务端例子+客户端例子+CXF整合spring服务端测试+生成wsdl文件 +cxf客户端代码自动生成

    首先到CXF官网及spring官网下载相关jar架包,这个不多说.webservice是干嘛用的也不多说. 入门例子 模拟新增一个用户,并返回新增结果,成功还是失败. 大概的目录如上,很简单. Res ...

  5. openssl实现双向认证教程(服务端代码+客户端代码+证书生成)

    一.背景说明 1.1 面临问题 最近一份产品检测报告建议使用基于pki的认证方式,由于产品已实现https,商量之下认为其意思是使用双向认证以处理中间人形式攻击. <信息安全工程>中接触过 ...

  6. 根据wsdl,apache cxf的wsdl2java工具生成客户端、服务端代码

    根据wsdl,apache cxf的wsdl2java工具生成客户端.服务端代码 apache cxf的wsdl2java工具的简单使用: 使用步骤如下: 一.下载apache cxf的包,如apac ...

  7. 代码自动生成工具MyGeneration之一(程序员必备工具)

    代码自动生成工具MyGeneration之一(程序员必备工具) 转 分类: C#2008-08-06 18:12 16064人阅读 评论(12) 收藏 举报 工具数据库相关数据库stringbrows ...

  8. Mybatis Generator代码自动生成(实体类、dao层、映射文件)

    写了一段时间增删改查有点厌烦,自己找了下网上的例子鼓捣了下自动生成. 首先得有一个配置文件: generatorConfig.xml <?xml version="1.0" ...

  9. Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展

    Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffoldi ...

随机推荐

  1. 虚函数&多态

    对于经常被问到的虚函数和多态的问题,发现百度百科回答得十分详细,所以自己在百度百科上的解释进行总结 一.虚函数 (1)虚函数简介:在某基类中声明为virtual并在一个或者多个派生类中被重新定义的成员 ...

  2. webgl自学笔记——光照

    在Webgl中我们使用顶点着色器和片元着色器来为我们的场景创建光照模型.着色器允许我们使用数学模型来控制如何照亮我们的场景. 最好有线性代数的相关知识. 本章中: 光源.法线.材料 光照和着色的区别 ...

  3. java 使用spring实现读写分离

    最近上线的项目中数据库数据已经临近饱和,最大的一张表数据已经接近3000W,百万数据的表也有几张,项目要求读数据(select)时间不能超过0.05秒,但实际情况已经不符合要求,explain建立索引 ...

  4. guava缓存底层实现

    摘要 guava的缓存相信很多人都有用到, Cache<String, String> cache = CacheBuilder.newBuilder() .expireAfterWrit ...

  5. 回味Python2.7——笔记1

    一.基本知识 1.一个值可以同时赋给几个变量: >>> x = y = z = 0 # Zero x, y and z >>> x 0 >>> y ...

  6. STM32使用cube生成的程序后在keil5编译后首次SWD可以下载再次下载不行的解决办法。

    使用cube配置导出工程在keil5编译后首次SWD下载可以再次下载不行的解决办法. 1原因: cube使用的是HAL库,初始化语句里面禁用了调试功能. 在stm32f1xx_hal_msp.c中 _ ...

  7. JARVIS 手机监控局域网内PC

    JARVIS 通过反向的Socket连接,实现通过手机(或任何可以发送Http请求的设备)对局域网内PC的监控.在外时可以远程监视家里PC任务的执行情况,甚至远程唤醒家里的PC提前打开游戏也可以实现( ...

  8. java Socket(详解)转载

    在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器 ...

  9. ICMP--ping--Traceroute

    ICMP经常被认为是IP层的一个组成部分.它传递差错报文以及其他需要注意的信息. ICMP报文通常被IP层或更高层协议TCP或UDP使用. 一些ICMP报文把差错报文返回给用户进程   ICMP报文是 ...

  10. vue-项目入门

    初入前端的新人在碰到vue.js后,去过官网,估计粗略的看下api文档以后会以为vue的安装只是把那串js代码直接粘贴复制到文档即可,虽然这样是可以,但那在项目中并不合适. 项目中的vue引入(配制安 ...