您当前访问的地址 https://wiki.goframe.org 为旧版本官网系统,未来已不再积极维护,请访问新官网系统 https://goframe.org 获得更好的交互体验。


  • No labels

40 Comments

  1. 在v2下使用sqlite时,使用该文档所述的link格式 (即sqlite::@file(文件名) ),结果一直报error14,打不开数据库。后面采用 sqlite: 文件名,则成功打开数据库。文档这里关于sqlite的使用是否存在问题?

    1. 这个格式是从v2.2版本开始支持,请使用最新版本框架。

  2. 配置中的updatedAt 自动更新的值是个字符串 “2022-10-14 13:46:09” 有没有指定用时间戳来替代该字符串时间的配置

    1. 郭强 这里时间戳自己转? 

  3. 使用pgsql的时候报:Error: missing "=" after "postgres:123456@tcp(localhost:5432)/dev_db" in connection info string"

    1. 仔细看下文档pgsql:root:12345678@tcp(127.0.0.1:5432)/test

      1. 我的数据库配置是这样的 

        "pgsql:postgres:123456@tcp(127.0.0.1:5432)/dev_db"
        实际报错:

        2022-10-22 09:17:13.082 {2caffb3e463f20178b74fb6d0d7a0bee} 200 "POST http 127.0.0.1:8000 /user/sign-up HTTP/1.1" 0.018, 127.0.0.1, "", "PostmanRuntime/7.29.2", 52, "Database Operation Error", ""
        Stack:
        1. missing "=" after "postgres:123456@tcp(127.0.0.1:5432)/dev_db" in connection info string", SELECT COUNT(1) FROM "user"

        1. 也要同时升级driver:go get -u github.com/gogf/gf/contrib/drivers/mysql/v2

          1. 感谢老哥,升级一下就没问题了

        2. 我也遇到了相同的问题,没看懂你们是怎么解决的。我的做法是把mysql/v2屏蔽了,打开了pgsql/v2


          2024-04-22 09:55:24.117 [ERRO] {384e82076177c81786a5b441a6bf7d52} D:/GO/GoFrame/hotgo/server/utility/simple/simple.go:114: SafeGo exec failed:casbin.NewAdapter err . 
          CREATE TABLE IF NOT EXISTS hg_admin_role_casbin (
           id bigint(20) NOT NULL AUTO_INCREMENT,
           p_type varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
           v0 varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
           v1 varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
           v2 varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
           v3 varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
           v4 varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
           v5 varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
           PRIMARY KEY (id) USING BTREE
          ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '管理员_casbin权限表' ROW_FORMAT = Dynamic;
          : missing "=" after "postgres:123456@tcp(127.0.0.1:5432)/hotgo" in connection info string"
          1. casbin.NewAdapter err .

  4. 这个有类似gorm的migration功能吗,表还是要自己提前创建好吗,那修改表结构不是很麻烦

    1. 貌似没有,需要自己导SQL文件

    2. 你最后咋整的放弃这个框架了吗?还是手工维护sql文件

  5. 连接clickhouse查询数据,请问这个错误和版本有关系嘛

    CLI Built Detail:
      Go Version:  go1.19.2
      GF Version:  v2.2.5
      Git Commit:  none
      Build Time:  2022-11-29 16:16:54

    clickhouse版本:22.2.2

    配置文件:

    # Database.
    database:
    logger:
    level: "all"
    stdout: true
    # 默认mysql数据源
    default:
    link: "mysql:root:123456@tcp(xxx.xxx.xxx.xxx:3306)/test"
    debug: true
    # clickhouse数据源
    ck:
    link: "clickhouse:default:123456@tcp(xxx.xxx.xxx.xxx:9000)/default"
    debug: true
    charset: utf8

    异常日志:

    [clickhouse][conn=1][XXX.XXX.XXX.XXX:9000][send query] compression=%!t(clickhouse.CompressionMethod=2) select * from 表名 where name= 'sss'
    [clickhouse][conn=1][XXX.XXX.XXX.XXX:9000][send data] compression=%!t(clickhouse.CompressionMethod=2)
    [clickhouse][conn=1][XXX.XXX.XXX.XXX:9000][exception] code: 115, message: Unknown setting charset
    2022-11-30 11:17:18.817 [ERRO] {285d7715763e2c1752303151bcfd403a} [ 80 ms] [ck] [default] [rows:0  ] select * from 表名 where name= 'sss'
    Error: code: 115, message: Unknown setting charset

  6. sqlite数据库在开发模式下可以使用相对路径,相对路径由项目路径开始

    下面配置将会读取文件的路径:项目文件夹/manifest/document/sqlite/focus.db 

    database:
        default:
            link: "sqlite::@file(manifest/document/sqlite/focus.db)"


  7. 有微信交流群吗? 求拉

    1. 这个页面有微信群的信息 框架介绍(v2.7.x)

  8. GoFrame CLI Tool v2.3.1  pgsql 遇到的一些问题(已解决


    cannot find database driver for specified database type "pgsql", did you misspell type name "pgsql" or forget importing the database driver?  possible reference: https://github.com/gogf/gf/tree/master/contrib/drivers

    遇到此问题 不需要下载CLI源码 添加驱动编译!!!



    go get -u github.com/gogf/gf/contrib/drivers/pgsql/v2

    并在 main.go 添加


    _ "github.com/gogf/gf/contrib/drivers/pgsql/v2"

    如果gen dao 生成代码报错 同样执行以上步骤 重新 gen dao


    其他数据库同理

    gf 默认支持的数据库 https://github.com/gogf/gf/tree/master/contrib/drivers


  9. pgsql有个关于表别名的BUG:

    代码:

    model := dao.BaseDept.Ctx(ctx).As("A")

    err = model.LeftJoin(dao.BaseOrg.Table(), "B", fmt.Sprintf("A.%s=B.%s",
    dao.BaseDept.Columns().COrgId, dao.BaseOrg.Columns().Id,
    )).Fields(fmt.Sprintf("A.*,B.%s AS c_org_name", dao.BaseOrg.Columns().CName)).Scan(&res)

    ----------------------------------------

    出错信息:

    SELECT A.*,B.c_name AS c_org_name FROM "tb_base_dept" AS A LEFT JOIN\"tb_base_org" AS "B" ON (A.c_org_id=B.id) WHERE "A"."deleted_at" IS NULL AND "B"."deleted_at" IS NULL: pq: 对于表\"b\",丢失FROM子句项

    --------------------------------------------

    原因分析:

    在生成的SQL语句中,发现两个表的别名A和B,有些有双引号,有些没有(当然其中也有我的代码中硬编码的也没有加双引号),

    如果将所有硬编码部分的A、B都写成"\"A\"" "\"B\""这样也是可以的,但显得非常麻烦,而且容易出错

    这个问题应该是仅出现在多表操作时,单表操作没有发现这个问题


  10. pgsql 我看是使用 lib/pq , lib/pq 已進入維護模式不再新增功能

    有考慮更換為 pgx 嗎?

    1. 可以提pr哈

  11. 提一个bug,达梦数据库link`dm:root:12345678@tcp(127.0.0.1:5236)/test`  这么写的的话会出现不指定达梦模式的问题,需要这样写才能指定连接模式 `dm:root:12345678@tcp(127.0.0.1:5236)/test?schema=test`

    1. 看起来似乎是配置的问题,如果觉得是BUG欢迎提PR参与共建。

    2. hi, bro!
      I am working on upgrading Dameng content, please pay attention to the merge of this branch

      https://github.com/gogf/gf/tree/fix/db_dameng

  12. sqlite驱动, gtime.Time类型,数据库字段采用text类型,写入时间为空。

    type SysLoginLog struct {
    g.Meta `orm:"table:sys_login_log, do:true"`
    InfoId interface{} // 访问ID
    LoginName interface{} // 登录账号
    Ipaddr interface{} // 登录IP地址
    LoginLocation interface{} // 登录地点
    Browser interface{} // 浏览器类型
    Os interface{} // 操作系统
    Status interface{} // 登录状态(0成功 1失败)
    Msg interface{} // 提示消息
    LoginTime *gtime.Time // 登录时间
    Module interface{} // 登录模块
    }


  13. fc

    sqlserver连接时使用sa用户,设置namespace,db.model(table)构建后没有拼接namespace,驱动里面确实没有这个功能,就是找不到对应的表,这个要怎么修改,主要是update那里会查tablefields,如果我传入 schema.table,不知道其他地方是否会有什么影响

  14. 我的版本 gf -v

    GoFrame CLI Tool v2.5.2, https://goframe.org
    GoFrame Version: v2.5.3 in current go.mod
    CLI Installed At: D:\gopath\bin\gf.exe
    Current is a custom installed version, no installation information.

    但是 gf gendao 生成的代码不对呢。生成的任何表对应的字段都是不对的呢,entity目录下的。

    type HomeUserChange struct {
    Id `json:"id" description:"'ID'"`
    UserId `json:"userId" description:"'用户'"`
    BeforeAmount float64 `json:"beforeAmount" description:"'变动前金额'"`
    CurrentAmount float64 `json:"currentAmount" description:"'此次变动金额'"`
    AfterAmount float64 `json:"afterAmount" description:"'变动后金额'"`
    Type `json:"type" description:"'类型'"`
    CreatedAt *gtime.Time `json:"createdAt" description:"'创建时间'"`
    UpdatedAt *gtime.Time `json:"updatedAt" description:"'更新时间'"`
    Code `json:"code" description:"'订单号'"`
    }

    我回退到2.0.0 版本没有问题了,你们2.5.3这个版本肯定有问题的。


    gf -v 

    GoFrame CLI Tool v2.0.0, https://goframe.org 
    GoFrame Version: v2.5.3 in current go.mod 
    CLI Installed At: D:\gopath\bin\gf.exe
    CLI Built Detail:
      Go Version:  go1.17.7
      GF Version:  v2.0.0
      Git Commit:  2022-03-08 21:27:14 aa294ea5df3b86dd8d45dcbf8f3f8b3b5176acf8
      Build Time:  2022-03-08 21:55:37

  15. gdb类覆盖率好低啊, 都是0%

    1. 这里澄清一下, gdb的覆盖率, 是单独提出来放在各个驱动里面的. 如mysql驱动

  16. pg 的 timezone 不能用 `local`, 要用 具体的, 比如:

    timezone: "Asia/Shanghai"

  17. 郭强 我的数据库密码包含@,怎么办呢?

    1. lip

      不用处理,dsn会解析最后一个@作为间隔符

      link: "mysql:root:gE0`cM3@bJ4@cB0@fG6}oA5(aA0`eG@tcp(xx:3306)/xxx?loc=Local&parseTime=true"
  18. SHOW FULL COLUMNS 这个查询是否可以关闭掉,在我执行垮库查询的时候执行这条SHOW FULL COLUMNS会报错。单又不会影响查询结果,会导致一堆错误log

    1. 我看你用的版本v2.0.6比较老了,建议升级一下框架版本,后续版本有过改进。

  19. hzj

    能否在简化下配置,我们实际项目需要链接上百个 mysql,配置文件中每个 mysql 都需要单独配置下 maxIdle、maxOpen 参数,配置文件会很长,如下:

    database:
    default:
    type: "mysql"
    maxIdle: "100"
    maxOpen: "100"
    debug: true
    link: "root:@tcp(localhost:3306)/start_do?charset=utf8&loc=Asia%2FShanghai"
    cas:
    type: "mysql"
    maxIdle: "100"
    maxOpen: "100"
    debug: true
    link: "root:@tcp(192.168.6.19:3306)/cas?charset=utf8&loc=Asia%2FShanghai"
    casbin:
    type: "mysql"
    maxIdle: "100"
    maxOpen: "100"
    debug: true
    link: "root:@tcp(192.168.6.19:3306)/casbin?charset=utf8&loc=Asia%2FShanghai"
    ta:
    type: "mysql"
    maxIdle: "100"
    maxOpen: "100"
    debug: true
    link: "ta:Er9YV1Pg3ixbDbu@tcp(106.52.147.132:3306)/ta?charset=utf8&loc=Asia%2FShanghai"
    start_do_test:
    maxIdle: "100"
    maxOpen: "100"
    type: "mysql"
    debug: true
    link: "root:@tcp(192.168.6.19:3306)/start_do_test?charset=utf8&loc=Asia%2FShanghai"
    start_do:
    maxIdle: "100"
    maxOpen: "100"
    type: "mysql"
    debug: true
    link: "root:@tcp(192.168.6.19:3306)/start_do?charset=utf8&loc=Asia%2FShanghai"

    可否提供公共参数可以全局配置的功能,如果分组内没有配置,则取全局的配置。反之则取分组内的配置,如下:
    database:
    maxIdle: "100"
    maxOpen: "100"
    debug: true

    default:
    type: "mysql"
    link: "root:@tcp(localhost:3306)/start_do?charset=utf8&loc=Asia%2FShanghai"
    cas:
    type: "mysql"
    link: "root:@tcp(192.168.6.19:3306)/cas?charset=utf8&loc=Asia%2FShanghai"
    casbin:
    type: "mysql"
    link: "root:@tcp(192.168.6.19:3306)/casbin?charset=utf8&loc=Asia%2FShanghai"
    ta:
    maxOpen: "100"
    link: "ta:Er9YV1Pg3ixbDbu@tcp(106.52.147.132:3306)/ta?charset=utf8&loc=Asia%2FShanghai"
    start_do_test:
    type: "mysql"
    link: "root:@tcp(192.168.6.19:3306)/start_do_test?charset=utf8&loc=Asia%2FShanghai"
    start_do:
    type: "mysql"
    link: "root:@tcp(192.168.6.19:3306)/start_do?charset=utf8&loc=Asia%2FShanghai"

    1. 可以使用配置服务,这样就不需要单独写了配置文件了,集中在配置服务中设置

  20. 问大家一下,我的只有这样配置 才能联通"link":"sqlite:./errfile.db"  但是按"link":"sqlite::@file(./errfile.db)" 就不通


  21. V2.6版本使用sqlite 进行数据插入,总是报database is locked (5) (SQLITE_BUSY),能不能帮忙分析下

  22.  role:                  "(可选)数据库主从角色(master/slave),不使用应用层的主从机制请均设置为master"

    如果主从都设置成master,数据库主从切换后,只能读数据,不能改数据,只能重新改配置重启服务。