zoukankan      html  css  js  c++  java
  • goframe gf-cli的使用

    1.视频教程

    https://www.bilibili.com/video/BV1YK4y1b7W8?p=1

    2.官方文档

    https://goframe.org/toolchain/cli

    3.下载

    工具开源项目地址:https://github.com/gogf/gf-cli

    本人系统环境

    aima@haima-PC:~/Desktop$ uname -a
    Linux haima-PC 4.15.0-30deepin-generic #31 SMP Fri Nov 30 04:29:02 UTC 2018 x86_64 GNU/Linux
    haima@haima-PC:~/Desktop$ lsb_release -a
    No LSB modules are available.
    Distributor ID:	Deepin
    Description:	Deepin 15.11
    Release:	15.11
    Codename:	stable
    
    
    haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/gf/gf-demos02$ wget https://goframe.org/cli/linux_amd64/gf #下载
    haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/gf/gf-demos02$ ./gf install #安装gf工具到/usr/local/go/bin
    I found some installable paths for you: 
      Id | Writable | Installed | Path
       0 |     true |     false | /usr/local/go/bin
    please choose one installation destination [default 0]: 0  #选择0安装位置
    gf binary is successfully installed to: /usr/local/go/bin
    haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/gf/gf-demos02$ gf -v  #查看版本
    GoFrame CLI Tool v0.7.4, https://goframe.org
    Install Path: /usr/local/go/bin/gf
    Build Detail:
      Go Version:  go1.14
      GF Version:  v1.12.2
      Git Commit:  a6a76f7ef3ef7fe5456059be5beb20366d980c9d
      Build Time:  2020-05-07 19:06:55
    haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/gf/gf-demos02$ gf -h #查看帮助
    haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/gf/gf-demos02$ gf gen -h #查看gen帮助
    

    4.创建项目

    haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/gf/gf-demos02$ gf init gf01 #在当前目录里创建项目名为gf01的项目
    current folder is not empty, files might be overwrote, continue? [y/n]: y
    initializing...
    initialization done! 
    you can now run 'gf run main.go' to start your journey, enjoy!
    

    5.启动项目

    haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/gf/gf-demos02$ gf run main.go

    些命令支持热编译(自动编译)

    浏览器访问http://localhost:8199/已经可以正常输出

    Hello World!

    6.交叉编译

    a.在config/config.toml文件里加入下面的编译配置信息

    # 编译配置文件
    [compiler]
         name     = "gf01" #编译后的文件名称
         version  = "1.0.0" #编译后的文件会生成到/bin/1.0.0目录里
         arch     = "386,amd64"
         system   = "linux,windows,darwin"
         output   = ""
         path     = "./bin"  #输出到bin目录
         extra    = "-ldflags "-s -w""
         # 自定义编译时内置变量
         [compiler.VarMap]
             author = "john"
             email  = "john@goframe.org"
    

    b.执行编译命令

    haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/gf/gf-demos02$ gf build main.go
    2020-06-04 06:41:12.542 start building...
    2020-06-04 06:41:12.542 go build -o ./bin/1.0.0/darwin_386/gf01 -ldflags "-s -w" main.go
    2020-06-04 06:41:38.765 go build -o ./bin/1.0.0/darwin_amd64/gf01 -ldflags "-s -w" main.go
    2020-06-04 06:42:19.657 go build -o ./bin/1.0.0/linux_386/gf01 -ldflags "-s -w" main.go
    2020-06-04 06:43:01.497 go build -o ./bin/1.0.0/linux_amd64/gf01 -ldflags "-s -w" main.go
    2020-06-04 06:43:17.780 go build -o ./bin/1.0.0/windows_386/gf01.exe -ldflags "-s -w" main.go
    2020-06-04 06:43:55.577 go build -o ./bin/1.0.0/windows_amd64/gf01.exe -ldflags "-s -w" main.go
    2020-06-04 06:44:33.453 done!
    

    c.打包好之后的文件

    ├── bin
    │   └── 1.0.0
    │       ├── darwin_386
    │       │   └── gf01
    │       ├── darwin_amd64
    │       │   └── gf01
    │       ├── linux_386
    │       │   └── gf01
    │       ├── linux_amd64
    │       │   └── gf01
    │       ├── windows_386
    │       │   └── gf01.exe
    │       └── windows_amd64
    │           └── gf01.exe
    
    

    d.运行编译后的文件

    这里本人的系统是linux_amd64,

    所以运行./bin/1.0.0/linux_amd64/gf01

    haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/gf/gf-demos02$ ./bin/1.0.0/linux_amd64/gf01 
    2020-06-04 06:52:58.568 [DEBU] [ghttp] SetServerRoot path: /media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/gf/gf-demos02/public
    
      SERVER  | DOMAIN  | ADDRESS | METHOD | ROUTE |         HANDLER          | MIDDLEWARE  
    |---------|---------|---------|--------|-------|--------------------------|------------|
      default | default | :8199   | ALL    | /     | gf01/app/api/hello.Hello |             
    |---------|---------|---------|--------|-------|--------------------------|------------|
    
    2020-06-04 06:52:58.570 26600: http server started listening on [:8199]
    
    

    浏览器访问http://localhost:8199/已经可以正常输出

    Hello World!

    7.gen命令的使用

    gen命令用以自动化从数据库直接生成模型文件。

    该命令将会根据数据表名(注意:所以要先在数据里建好表)生成对应的目录,该目录名称即数据表包名。目录下自动生成3个文件:

    数据表名.go 自定义文件,开发者可以自由定义填充的代码文件,仅会生成一次,每一次模型生成不会覆盖。
    数据表名_entity.go 表结构文件,根据数据表结构生成的结构体定义文件,包含字段注释。数据表在外部变更后,可使用gen命令重复生成更新该文件。
    数据表名_model.go 表模型文件,为数据表提供了许多便捷的CURD操作方法,并可直接查询返回该表的结构体对象。数据表在外部变更后,可使用gen命令重复生成更新该文件。
    
    数据表模型生成支持的数据库类型为:MySQL/MariaDB、PostgreSQL、SQLite、SQLServer。目前暂不支持Oracle,若有需求请联系作者。
    

    注意:所以要先在数据里建好表

    操作步骤

    a.新建表sys_users

    CREATE TABLE `sys_users` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `created_at` timestamp NULL DEFAULT NULL,
      `updated_at` timestamp NULL DEFAULT NULL,
      `deleted_at` timestamp NULL DEFAULT NULL,
      `uuid` varbinary(255) DEFAULT NULL,
      `user_name` varchar(255) DEFAULT NULL,
      `pass_word` varchar(255) DEFAULT NULL,
      `nick_name` varchar(255) DEFAULT 'QMPlusUser',
      `header_img` varchar(255) DEFAULT 'http://www.henrongyi.top/avatar/lufu.jpg',
      `authority_id` varchar(255) DEFAULT '888',
      `authority_name` varchar(255) DEFAULT NULL,
      `username` varchar(255) DEFAULT NULL,
      `password` varchar(255) DEFAULT NULL,
      `phone_data` varchar(255) DEFAULT NULL,
      `manager` varchar(255) DEFAULT NULL,
      `substation_sn` varchar(255) NOT NULL DEFAULT '' COMMENT '变电站sn',
      `power_supply_stations_sn` varchar(255) NOT NULL DEFAULT '' COMMENT '所属部门sn',
      `company_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '所属公司',
      PRIMARY KEY (`id`),
      KEY `idx_users_deleted_at` (`deleted_at`) USING BTREE,
      KEY `idx_sys_users_deleted_at` (`deleted_at`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
    
    

    b.生成model

    gf gen model ./app/model -c config/config.toml -p sys_ -t sys_users

    命令说明

    ./app/model #在model生成的路径
    -c config/config.toml #在这个配置里找database数据库连接配置 需要写好mysql的配置信息

    config/config.toml文件

    # Database.
    [database]
        link  = "mysql:root:123456@tcp(127.0.0.1:3306)/gf01"
        debug = true
        # Database logger.
        [database.logger]
            Path   = "/tmp/log/gf-app/sql"
            Level  = "all"
            Stdout = true
    

    -p sys_ #去除生成文件目录的sys前缀 如果不加这个参数就会按数据库名生成目录和文件名 如:sys_users
    -t sys_users #要生成model的数据表文件名

    实操:

    haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/gf/gf-demos02$ gf gen -h #查看帮助
    haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/gf/gf-demos02$ gf gen model ./app/model -c config/config.toml -p sys_ -t sys_users
    path './app/model' is not empty, files might be overwrote, continue? [y/n]: y
    2020-06-04 07:41:50.296 [DEBU] [  1 ms] SHOW FULL COLUMNS FROM `sys_users`
    generated: ./app/model/users/users.go
    generated: ./app/model/users/users_entity.go
    generated: ./app/model/users/users_model.go
    done!
    

    此时 在./app/model目录里生成users文件

    │   ├── model
    │   │   └── users
    │   │       ├── users_entity.go #表结构文件,根据数据表结构生成的结构体定义文件,包含字段注释。数据表在外部变更后,可使用gen命令重复生成更新该文件。
    │   │       ├── users.go #自定义文件,开发者可以自由定义填充的代码文件,仅会生成一次,每一次模型生成不会覆盖。
    │   │       └── users_model.go #表模型文件,为数据表提供了许多便捷的CURD操作方法,并可直接查询返回该表的结构体对象。数据表在外部变更后,可使用gen命令重复生成更新该文件。
    
    

    c.调用生成的users model

    修改 app/api/hello/hello.go文件

    // Hello is a demonstration route handler for output "Hello World!".
    func Hello(r *ghttp.Request) {
        r.Response.Writeln("Hello World!")
        userInfo, err := users.FindOne("username = ?", "admin")
        if err !=nil {
            //glog.Error(err)
            fmt.Println(err)
            r.Response.Writefln("err")
            r.Exit()
        }
        r.Response.Writefln(userInfo.NickName)
    }
    

    运行 gf run main.go

    浏览器访问http://localhost:8199/已经可以正常输出

    Hello World!
    超级管理员

    8.orm的操作

    package main
    
    import (
        "fmt"
        "github.com/gogf/gf/frame/g"
        "p3/app/model/mytable"
    )
    
    
    func main() {
        // 查询所有数据
        result, err := mytable.FindAll()
        if err != nil {
            panic(err)
        }
    
        // 遍历数据
        for _, val := range result{
            fmt.Printf("id: %d  name:%s
    ", val.Id, val.Name)
        }
    
        // 查询单条数据
        data, err := mytable.FindOne()
        if err != nil {
            panic(err)
        }
        fmt.Printf("id: %d  name:%s
    ", data.Id, data.Name)
    
    
        // 条件查询, 查询name为王哈哈的
        dataList, err := mytable.FindAll(g.Map{
            "name": "王哈哈",
        })
        if err != nil {
            panic(err)
        }
    
        for _, val := range dataList {
            fmt.Printf("id: %d  name:%s
    ", val.Id, val.Name)
        }
    
        // 查询数据总条数
        num, err := mytable.FindCount()
        if err != nil {
            panic(err)
        }
        fmt.Printf("共有 %d 条数据
    ", num)
    
    
        // 插入数据
        _, err = mytable.Insert(g.Map{
            "name": "王哈哈",
        })
    
        if err != nil {
            panic(err)
        } else {
            fmt.Println("插入数据成功")
        }
    
        // 删除数据
        _, err  = mytable.Delete(g.Map{
            "id": 3,
        })
        if err != nil {
            panic(err)
        } else {
            fmt.Println("删除数据成功")
        }
    
        // 修改数据, 把id为8的name改为王大炮
        mytable.Update(g.Map{"name": "王大炮"}, "id", 8)
    
        // 修改多个字段, 把id为9的数据name改为小可爱,id改为10000
        mytable.Update(g.Map{"name": "小可爱", "id": 10000}, "id", 9)
    }
    
    
    
  • 相关阅读:
    jquery处理鼠标左中右键事件
    bootstrap弹出框
    移动端去掉a标签点击时出现的背景
    sessionStorage
    页面滑动到最下面,执行代码
    判断页面时向上滚动还是向下滚动
    sql 时间查询 /sql中判断更新或者插入/查询一年所有双休日
    求取最大值
    Repeater 获取数据值
    加载完毕后执行计算
  • 原文地址:https://www.cnblogs.com/haima/p/13041257.html
Copyright © 2011-2022 走看看