博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go 语言,开源服务端代码自动生成 框架 - EasyGoServer
阅读量:5953 次
发布时间:2019-06-19

本文共 4166 字,大约阅读时间需要 13 分钟。

EasyGoServer

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

掘金:

博客:

GitHub :

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


[TOC]

----- 概述

----- 脚本介绍

--------- Linux

--------- Windows

--------- Mac

----- 使用流程

----- 部分代码说明

----- TODO

概述

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

1,基础的 增删改查

2,拓展性强的API

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

  • 例如你的一个输入结构体 inputStruct 设置为

    type inputStruct struct {   // nullTag==1 指明 id 必须要求在客户端传入 {"id":123}   Id   int64   `json:"id"   nullTag:"1"`    // nullTag==0 指明 name 在客户端输入的时候可以不必要   Name string  `json:"name" nullTag:"0"` }复制代码

    对应上例,客户端 post 过来的 json : {"id":666, "name":"lgh"}

  • 当你在使用 select 的时候,你的 sql 如果是这样的:

    select User.id , User.age from User
    那么你的对应输出结构体 outputStruct 应该是:

    type outputStruct struct {   Id   int64  `json:"id"`      Age  int64  `json:"age"` }复制代码

    最终输出给客户端:[{"id":xxx,"age":xxx}]

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


脚本介绍


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

one_key_create_code

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

make_server

Linux OS

one_key_create_code.sh

make_server.sh
Makefile

Windows OS

one_key_create_code.bat

make_server.bat

Mac OS

参照 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)}复制代码

开源地址

转载地址:http://tdoxx.baihongyu.com/

你可能感兴趣的文章
移动办公之路的行业探索
查看>>
Berg Insight:移动M2M连接将实现长足发展
查看>>
2017年云计算行业新动向盘点
查看>>
雅虎因发送垃圾短信面临50万人集体诉讼
查看>>
linux curl 命令(转)
查看>>
Qt设计器中,使用QToolBar控件的技巧
查看>>
安裝linux後的內核調優
查看>>
ESXi 5.1 安装 Mac OSX Lion 10.7
查看>>
ASA防火墙 NAT新版老版的配置方法对比
查看>>
中国五大顶级域名9月第一周新增3.2万 美国净减7.6万个
查看>>
11月苹果移动设备份额TOP10:iPhone 6上榜居六
查看>>
6月第4周全球域名注册商(国际域名)新增注册量TOP22
查看>>
2016年1月中国域名商解析量14强:排名变动大
查看>>
IntelliJ IDEA 14 license key gen
查看>>
ogg启动报错libnnz11.so: cannot open shared object file
查看>>
如何实现“持续集成”?闲鱼把研发效率翻了个翻
查看>>
IT人的“钱”景以及收入的两道坎
查看>>
PHP 5.4.8 添加系统服务命令
查看>>
jdk与jre的区别
查看>>
什么是https,和ssl什么关系,为什么用https
查看>>