Mariadb   发布时间:2022-05-23  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Go 语言,开源服务端代码自动生成 框架 - EasyGoServer大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

<h1 ID="easygoserver">EasyGoServer@H_607_1@

EasyGoServer ---- 概述 ---- 脚本介绍 -------- linux -------- windows -------- Mac ---- 使用流程 ---- 部分代码说明 ---- 开源地址@H_607_1@

ID="概述">概述

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

1,基础的 增删改查@H_607_1@

2,拓展性强的API@H_607_1@

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

  • 例如你的一个输入结构体 inputStruct 设置为
@H_618_22@ 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"}@H_607_1@

  • 当你在使用 SELEct 的时候,你的 sql 如果是这样的SELEct User.ID,User.age from User 那么你的对应输出结构体 outputStruct 应该是:
@H_618_22@ type inputStruct struct { ID int64 `Json:"ID"` Age int64 `Json:"age"` }

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

img src="https://code.js-code.com/res/2019/02-07/23/2ca0f3c732a15359ea906983846b8221.png">@H_607_1@@H_607_1@

<h3 ID="脚本介绍">脚本介绍@H_607_1@

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

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

ID="linux">linux

one_key_create_code.sh make_server.sh Makefile@H_607_1@

ID="windows">windows

one_key_create_code.bat make_server.bat@H_607_1@

ID="mac">Mac

参照 linux 的@H_607_1@

ID="使用流程">使用流程

1,在你的 服务器 安装 MysqL 或者 mariadb@H_607_1@

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

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

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

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

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

6,自己写好,main.go 或者 使用我提供的默认 LghSampleMain.go,在里面 添加你自己的路由@H_607_1@ @H_618_22@ 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 文件,我里面有例子@H_607_1@

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

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

ID="部分代码说明">部分代码说明

核心的参数结构体@H_607_1@ @H_618_22@type Lghrequest struct { w http.ResponseWriter r *http.request

// <a href="https://code.js-code.com/tag/biaoji/" target="_blank" class="keywords">标记</a><a href="https://m.code.cc/tag/shiyong/" target="_blank" class="keywords">使用</a>,当前的<a href="https://code.js-code.com/tag/fangfa/" target="_blank" class="keywords">方法</a><a href="https://code.js-code.com/tag/mingcheng/" target="_blank" class="keywords">名称</a>
func<a href="https://m.code.cc/tag/name/" target="_blank" class="keywords">name</a> String

// 输入的结构体,与客户端输入的 <a href="https://m.code.cc/tag/Js/" target="_blank" class="keywords">Js</a>on 成对应关系
<a href="https://m.code.cc/tag/input/" target="_blank" class="keywords">input</a>Struct  interface{}

// <a href="https://code.js-code.com/tag/zidingyi/" target="_blank" class="keywords">自定义</a> s<a href="https://m.code.cc/tag/li/" target="_blank" class="keywords">li</a>ces 的回调,<a href="https://m.code.cc/tag/fangbian/" target="_blank" class="keywords">方便</a>你做<a href="https://m.code.cc/tag/canshu/" target="_blank" class="keywords">参数</a>处理,返回 true 意味着此次操作终止,例如 update
s<a href="https://m.code.cc/tag/li/" target="_blank" class="keywords">li</a>cesCallBACk func(s<a href="https://m.code.cc/tag/li/" target="_blank" class="keywords">li</a>ces []interface{}) bo<a href="https://m.code.cc/tag/ol/" target="_blank" class="keywords">ol</a>

// 根据传入的 <a href="https://m.code.cc/tag/Js/" target="_blank" class="keywords">Js</a>onObj <a href="https://code.js-code.com/tag/shengcheng/" target="_blank" class="keywords">生成</a>的 s<a href="https://m.code.cc/tag/li/" target="_blank" class="keywords">li</a>ces 来回调,<a href="https://code.js-code.com/tag/fangfa/" target="_blank" class="keywords">方法</a><a href="https://code.js-code.com/tag/shengcheng/" target="_blank" class="keywords">生成</a><a href="https://code.js-code.com/tag/zidingyi/" target="_blank" class="keywords">自定义</a> <a href="https://code.js-code.com/tag/sql/" target="_blank" class="keywords">sql</a>
get<a href="https://code.js-code.com/tag/sql/" target="_blank" class="keywords">sql</a>CallBACk func(s<a href="https://m.code.cc/tag/li/" target="_blank" class="keywords">li</a>ces []interface{},<a href="https://m.code.cc/tag/input/" target="_blank" class="keywords">input</a>Struct interface{}) String

}

例子方法@H_607_1@

1,演示不需要参数的形式@H_607_1@ @H_618_22@/** 演示不需要参数的形式 */ 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 的情况@H_607_1@ @H_618_22@/** 演示当有参数输入的时候,参数仅做判断,但是不需要组合到 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,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,演示使用输入参数的情况@H_607_1@ @H_618_22@/** 演示使用输入参数的情况 */ func update_luser_sample(w http.ResponseWriter,r *http.request) { type testS struct { ID int64 `Json:"ID" nullTag:"1"` } request := Lghrequest{ w,func(slices []interface{}) bool{ return false },inputStruct interface{}) String { return "update LUser set u_user_iD='444' where ID=?" /** 对应 ID */ }} updateDataByStruct(request) }

ID="开源地址">开源地址

https://github.com/af913337456/EasyGoServer@H_607_1@

大佬总结

以上是大佬教程为你收集整理的Go 语言,开源服务端代码自动生成 框架 - EasyGoServer全部内容,希望文章能够帮你解决Go 语言,开源服务端代码自动生成 框架 - EasyGoServer所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: