Go 语言,开源服务端代码自动生成 框架 - EasyGoServer

EasyGoServer

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

腾讯云+社区:https://cloud.tencent.com/developer/user/1148436/activities

掘金: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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏温安适的blog

redis中的lua

3956
来自专栏24K纯开源

Windows下程序启动时出现0xc000007b错误的解决方案

一、背景介绍       不久前用Qt开发了一款小工具在公司使用,Debug运行时一切正常。可是当Release编译发布打包之后,运行时弹出这样的提示框: ? ...

2207
来自专栏信安之路

PHP代码审计

代码审计顾名思义就是检查源代码中的缺点和错误信息,分析并找到这些问题引发的安全漏洞,并提供代码修订措施和建议。

1190
来自专栏企鹅号快讯

《06.Spring Boot的数据访问:PagingAndSortingRepository使用》

示例 使用PagingAndSortingRepository接口 PagingAndSortingRepository继承自CrudRepository接口,...

30510
来自专栏月牙寂

k8s源码分析-----kubelet(7)containerRuntime

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

3896
来自专栏安恒网络空间安全讲武堂

radare2介绍及简单使用

本文作者:binlmmhc 0x01---radare2介绍 最近在看别人的病毒分析报告的时候,看到别人使用了radare2这个开源二进制分析平台,发现这个平台...

1.6K9
来自专栏PhpZendo

深入浅出 Laravel 的 Facade 外观系统

本文将从以下几个方面出发,全面讲解 Laravel 中 Facade 的运行原理,为了便于理解后续中所有 Facade 译作「外观」:

910
来自专栏xingoo, 一个梦想做发明家的程序员

JSP与JavaBeans

  JavaBeans简介   JavaBeans是一种符合一定标准的普通java类,需要满足下面几点:   1 类是public   2 属性私有   3 空...

1816
来自专栏Jerry的SAP技术分享

使用Java程序消费SAP Leonardo的机器学习API

以sap leonardo作为关键字在微信上搜索,能搜到不少文章。但是我浏览了一下,好像没有发现有从具体编程角度上来介绍的。所以我就贡献一篇。

1352
来自专栏流媒体

APK打包过程aapt打包过程

Android系统定义了一套通用资源,这些资源可以被应用程序引用。例如,我们在XML布局文件中指定一个LinearLayout的android:orientat...

785

扫码关注云+社区