Go-sword 基于 Go 语言的可视化 web 管理后台生成工具 ,程序员的福音啊~ - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
sunshinev
V2EX    Go 编程语言

Go-sword 基于 Go 语言的可视化 web 管理后台生成工具 ,程序员的福音啊~

  •  
  •   sunshinev
    sunshinev 2020-05-05 20:45:34 +08:00 3590 次点击
    这是一个创建于 2036 天前的主题,其中的信息可能已经有所发展或是发生改变。

    e5355b6316b83dcf4b6be9b7544f8e331588255151.jpg

    Go-sword(利刃)是一款基于 Go 语言的可视化 web 管理后台生成工具

    GitHub last commit GitHub GitHub repo size GitHub stars GitHub forks

    官方网站 https://sunshinev.github.io/go-sword-home/

    她能满足你哪些?

    1. 你有代码洁癖,不希望工具过多干扰你的业务逻辑
    2. 你希望生成的页面可以自定义修改,来实现更多的功能
    3. 你希望代码特别简单易读,且容易自定义
    4. 你希望能快速构建管理后台,哪怕仅仅是将数据库里的数据可视化
    5. 你希望一键生成 CRUD,无需复杂操作
    6. 你希望使用 iView 的组件,快速构建页面

    那么 go-sword 可以满足你

    根据 MySQL 的表结构,创建完整的管理后台界面,开发者无需再重复手动的创建具有 CRUD 能力的页面 只需要点击按钮即可生成完整的管理后台

    136e8b44d5d4acf00d5a63125928bd731587996269.jpg

    特点

    1. 一键生成,无需写一行代码
    2. 支持增加、删除、编辑、列表、批量删除、分页、检索
    3. 页面基于 Vue.js + iView
    4. 针对每个数据表都生成了单独的逻辑文件,开发者可以求使用 Vue 或者 iView 来实现功能更加丰富的页面

    1626ee1d3300ac6db6669d63721d96381587996351.jpg

    开始

    安装

    go get -u github.com/sunshinev/go-sword 

    编译

    go build 

    安装完成后,确保go-sword命令在GOPATH/bin目录下,可执行

    启动服务

    go-sword -db {db_database} -password {db_password} -user {db_uesr} -module {module_name} 

    例如:go-sword -db blog -password 123456 -user root -module go-sword-app

    以上命令,就是连接数据库blog,用户名root,密码12345,在 go-sword 命令的当前目录下创建项目go-sword-app

    启动成功的提示

    Go-Sword will create new project named go-sword-app in current directory [Server info] Server port : 8080 Project module : go-sword-app [db info] MySQL host : localhost MySQL port : 3306 MySQL user : root MySQL password : 123456 Start successful, server is running ... Please request: http://localhost:8080 

    参数说明

    +---------------------------------------------------+ | | | Welcome to use Go-Sword | | | | Visualized tool | | Fastest to create CRUD background | | https://github.com/sunshinev/go-sword | | | +---------------------------------------------------+ Usage of go-sword: // 要连接的数据库信息 -db string MySQL database -host string MySQL Host (default "localhost") // 重要:module 参数单独作解释 -module string New project module, the same as 'module' in go.mod file. (default "go-sword-app/") // go-sword 服务启动的默认端口 -p string Go-sword Server port (default "8080") -password string MySQL password -port int MySQL port (default 3306) -user string MySQL user 

    参数: -module

    -module 参数是代表要创建的项目名称,同时也是新项目go.mod文件中的module字段的值,这点请务必保持一致。

    注意

    新项目会在运行go-sword命令的当前目录下,直接创建module目录,作为新项目

    开始使用服务

    Start successful, server is running ... Please request: http://localhost:8080 

    根据服务启动的提示,直接点击http://localhost:8080即可进入 web 的可视化工具页面

    59384a43cbc382dec53dd76d169a5d001587995174.jpg

    重要:页面功能介绍

    1. 首先下拉选择 MySQL 的表格,然后点击Preview按钮,即可渲染出需要创建的文件
    2. 首次创建新项目文件需要点击select all全部选择,首次创建包含了项目启动必需的核心文件
    3. 点击Generate按钮,既可以看到提示文件创建成功
    4. 到目前为止,我们的后台已经创建成功了

    注意:

    1. 首次创建,文件需要全部选择
    2. 如果创建第二个管理页面,那么可以只选择 select diff & new按钮,然后点击Generate按钮
    3. 每次生成新的管理界面后,请重启新创建的项目

    开始使用新项目

    进入到我们新创建的项目目录

     test tree -L 2 . └── go-sword-app ├── controller ├── core ├── go.mod ├── go.sum ├── main.go ├── model ├── resource ├── route └── view 

    比如说我们,刚刚是在test目录运行的go-sword命令,创建的项目就是test/go-sword-app

    我们进入test/go-sword-app目录下按照以下命令启动项目

    初始化新项目 go mod init

    利用go mod初始化项目,这里的module就是我们前面讲到的要与项目名称保持一致!!

    go mod init {module} 

    启动项目

    go run main.go 

    然后会看到下面的提示,点击http://localhost:8082既可以进入后台管理界面

    Enjoy your system ^ ^ Generated by Go-sword https://github.com/sunshinev/go-sword [Server info] Server port : 8082 [db info] MySQL host : localhost MySQL port : 3306 MySQL user : root MySQL password : 123456 Start successful, server is running ... Please request: http://localhost:8082 

    管理后台效果

    1. 后端报错提醒
    2. 增加、删除、编辑、列表、批量删除、分页、检索

    1626ee1d3300ac6db6669d63721d96381587996351.jpg

    一些问题

    1. 因为 golang 的 map 结构遍历乱序的问题,部分页面输出的字段顺序不能保证和数据库字段顺序一致
    2. 关于module的参数,可能还会有更好的解决方案
    3. 没有提供用户注册、登录的能力,这也不符合初衷,最开始就是想做的更加基础,快速创建页面
    4. 生成的项目代码,还有很大的优化空间

    页面功能展示

    列表

    ea1f86ebc1b5c88aaf6484fa078584951587997286.jpg

    删除

    70279af696d9a230001f821cdf3a1ac21587997368.jpg

    预览

    2d1871a645acc3d3544ad7f77a0d6fca1587997398.jpg

    编辑

    a9255db26b2af0365655840f6afd27851587997440.jpg

    Go-sword fork

    如果想要自定义的话,那么需要注意,Go-sword 项目可以打包成一个那单独的命令来执行,因为将所有的静态文件也进行了打包

    静态文件压缩命令如下:

    go-bindata -o assets/resource/dist.go -pkg resource resource/dist/... 
    go-bindata -o assets/stub/stub.go -pkg stub stub/... 
    go-bindata -o assets/view/view.go -pkg view view/... 
    第 1 条附言    2020-05-13 18:59:47 +08:00
    官方文档发布: https://go-sword-doc.osinger.com/

    官方 QQ 群发布:690393633

    官网支持讨论区: https://sunshinev.github.io/go-sword-home/forum.html

    欢迎大家提出意见,多多指点
    第 2 条附言    2020-05-14 11:48:40 +08:00

    生命周期

    腾讯文档

    点击链接访问腾讯文档高清图例

    [腾讯文档] Go-sword 全生命周期 https://docs.qq.com/slide/DWk5sZVhncUpob1hj

    图例

    下图列出了整个工具的使用过程,如果有问题可以官网Forum留言

    c1009feb717d49c256b9bb01c6f0f3f01589427227.jpg

    第 3 条附言    2020-09-11 23:37:42 +08:00
    v1.0.0 更新
    1. 底层 db 转换 struct 进行了重写
    2. 使用切片代替 map,解决字段排序问题
    3. 服务启动进行了重写,添加 config 包来解决全局配置 GlobalConfig
    4. 调整后的结构体主要有 int32/string/float64/time.Time 四种类型
    13 条回复    2020-05-13 18:59:27 +08:00
    ikaros
        1
    ikaros  
       2020-05-05 21:03:25 +08:00
    这官网做得真不错,等细看一下。顺带问一下支持 json 字段吗? 我现在用的 qor admin(gorm 那套), 这个现在有个问题就是 json 字段只能做成文本框输入, 而且不能在新增和修改之后做一些自定义操作
    dodo2012
        2
    dodo2012  
       2020-05-05 22:25:52 +08:00
    优秀。
    ila
        3
    ila  
       2020-05-05 22:35:36 +08:00 via Android
    点赞,已 star
    ArJun
        4
    ArJun  
       2020-05-05 22:51:10 +08:00
    轮子的想法不错,支持
    Smash
        5
    Smash  
       2020-05-05 22:55:22 +08:00
    设计是楼主自己搞的吗?
    forrestshuang
        6
    forrestshuang  
       2020-05-06 09:33:57 +08:00
    轮子不错,非常合适
    tikazyq
        7
    tikazyq  
       2020-05-06 14:00:27 +08:00
    类似于 fuckdb
    sunshinev
        8
    sunshinev  
    OP
       2020-05-06 14:56:40 +08:00   1
    @ikaros 如果要存储 json 的话,可以通过 iView 将文本框的字段修改为 type=textarea,那么其实 json 会作为字符串存储在 mysql 中的。因为每一个字段实际上都会映射到 golang 的 struct,如果要想在前端直接编辑 json 并且让每个字段都映射到 mysql 的字段的话,目前生成的页面不支持~不过可以稍作修改嘛~ go-sword 的最大的好处就是每个页面可以自定义~
    sunshinev
        9
    sunshinev  
    OP
       2020-05-06 14:57:52 +08:00
    @Smash go-sword 是使用 Vue.js + iView4.0 构建的,所以使用的是 iView4.0 的主题~ 前端代码也在项目里打包了,如果需要调整或者更换皮肤可以重新 yarn build~
    sunshinev
        10
    sunshinev  
    OP
       2020-05-06 14:59:47 +08:00
    @ArJun go-sword 就是奔着最简单,最轻的目的,如果有代码洁癖,不希望工具过多的干扰你的业务,比如说就是要个页面,登录的逻辑、用户的逻辑、这些都希望自己来实现,那就特别适合 go-sword,而且 go-sword 没有基于任何框架,比如 Gin 、beego 等。如果作为一个轮子也可以 fork 后做自定义,比如生成的代码按照自己的风格来改造~可能会更加强大,提高工作效率啦~
    sunshinev
        11
    sunshinev  
    OP
       2020-05-06 15:02:59 +08:00
    @tikazyq 刚看了下 fuckdb,应该是根据数据库的表格来生成 struct 结构体,这个在 go-sword 中使用的是 db2struct 作为解析包的, 并且对 db2struct 的代码做了一些调整,来满足前端的结构体解析的字段类型映射~

    fuckdb 是生成 struct 结构体代码
    sunshinev
        12
    sunshinev  
    OP
       2020-05-06 15:04:12 +08:00
    @tikazyq 不好意思,刚回了一半就按了回车。。。刚刚说到 db2struct,实际上 go-sword 是根据 mysql 的数据表来生成完整的 CRUD webUI 的管理后台的~
    sunshinev
        13
    sunshinev  
    OP
       2020-05-13 18:59:27 +08:00
    官方文档发布: https://go-sword-doc.osinger.com/

    官方 QQ 群发布:690393633

    官网支持讨论区: https://sunshinev.github.io/go-sword-home/forum.html

    欢迎大家提出意见,多多指点
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5669 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 06:29 PVG 14:29 LAX 22:29 JFK 01:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86