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 · 3276 次点击
    这是一个创建于 1693 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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   ·   实用小工具   ·   2998 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:10 · PVG 22:10 · LAX 06:10 · JFK 09:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.