gobee generate api 链接信息链接数据库创建项目报错

现象

gobee根据已有的数据库创建项目

bee api [appname] [-tables=""] [-driver=mysql] [-conn="root:<password>@tcp(127.0.0.1:3306)/test"]

报错:

______
| ___ \
| |_/ /  ___   ___
| ___ \ / _ \ / _ \
| |_/ /|  __/|  __/
\____/  \___| \___| v1.12.0
2021/08/31 18:03:19 INFO     ▶ 0001 generate api project support go modules.
2021/08/31 18:03:19 INFO     ▶ 0002 Creating API...
        create   D:\Go_workspace\src\IMApi\IMApi\go.mod
        create   D:\Go_workspace\src\IMApi\IMApi
        create   D:\Go_workspace\src\IMApi\IMApi\conf
        create   D:\Go_workspace\src\IMApi\IMApi\controllers
        create   D:\Go_workspace\src\IMApi\IMApi\tests
        create   D:\Go_workspace\src\IMApi\IMApi\conf\app.conf
        create   D:\Go_workspace\src\IMApi\IMApi\main.go
2021/08/31 18:03:19 INFO     ▶ 0003 Using 'mysql' as 'driver'
2021/08/31 18:03:19 INFO     ▶ 0004 Using 'root:root@tcp(localhost:3306)/test' as 'conn'
2021/08/31 18:03:19 INFO     ▶ 0005 Using 'im_users' as 'tables'
2021/08/31 18:03:19 INFO     ▶ 0006 Analyzing database tables...
panic: runtime error: index out of range [2] with length 0

goroutine 1 [running]:
github.com/beego/bee/generate.extractIntSignness(0xc000198e33, 0x3, 0xc000198e28, 0x6)
        D:/Go_workspace/pkg/mod/github.com/beego/bee@v1.12.3/generate/g_appcode.go:930 +0xcd
github.com/beego/bee/generate.(*MysqlDB).GetColumns(0x11ea050, 0xc000186410, 0xc0001a6240, 0xc000184ab0)
        D:/Go_workspace/pkg/mod/github.com/beego/bee@v1.12.3/generate/g_appcode.go:481 +0xfb5
github.com/beego/bee/generate.getTableObjects(0xc0001807e0, 0x1, 0x1, 0xc000186410, 0xd37700, 0x11ea050, 0x0, 0x1, 0x98)
        D:/Go_workspace/pkg/mod/github.com/beego/bee@v1.12.3/generate/g_appcode.go:363 +0x1e9
github.com/beego/bee/generate.gen(0xc0000a20c8, 0x5, 0xc0000ca036, 0x22, 0xc0000c9707, 0xc0000c9658, 0xc0001ae420, 0x1f)
        D:/Go_workspace/pkg/mod/github.com/beego/bee@v1.12.3/generate/g_appcode.go:316 +0x2e5
github.com/beego/bee/generate.GenerateAppcode(0xc0000a20c8, 0x5, 0xc0000ca036, 0x22, 0xbf642a, 0x1, 0xc0000a20a8, 0x8, 0xc0001ae420, 0x1f)
        D:/Go_workspace/pkg/mod/github.com/beego/bee@v1.12.3/generate/g_appcode.go:295 +0x232
github.com/beego/bee/cmd/commands/api.createAPI(0x1195080, 0xc0000d4020, 0x4, 0x6, 0x0)
        D:/Go_workspace/pkg/mod/github.com/beego/bee@v1.12.3/cmd/commands/api/apiapp.go:647 +0x1932
main.main()
        D:/Go_workspace/pkg/mod/github.com/beego/bee@v1.12.3/main.go:61 +0x297

原因

1.MySQL8.0.17版本之后,integer类型字段将不再显示长度
2.gobee 生成modelfile 的时候会验证int 的宽度


if isSQLSignedIntType(dataType) {
					sign := extractIntSignness(columnType)
					if sign == "unsigned" && extra != "auto_increment" {
						col.Type, err = mysqlDB.GetGoDataType(dataType + " " + sign)
						if err != nil {
							beeLogger.Log.Fatalf("%s", err)
						}
					}
				}


func extractIntSignness(colType string) string {
	regex := regexp.MustCompile(`(int|smallint|mediumint|bigint)\([0-9]+\)(.*)`)
	signRegex := regex.FindStringSubmatch(colType)
	return strings.Trim(signRegex[2], " ")
}

生成modelfile 的时候通过isSQLSignedIntType验证int类型,在extractIntSignness会通过字段的宽度来验证字符类型长度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在 HTML 网页上链接数据库,通常需要使用服务器端语言(如 PHP、ASP.NET、Java Servlets 等)来实现。 该语言会负责从数据库中读取数据,然后生成 HTML 页面,并将其发送给浏览器。在 HTML 中,您需要在需要展示数据的地方使用该语言的标记,以告诉服务器需要生成的内容。 例如,使用 PHP 和 MySQL 可以这样: 1. 在 HTML 中包含 PHP 标记: ``` <html> <head> <title>My Web Page</title> </head> <body> <h1>My Web Page</h1> <?php // PHP code to connect to the database $db = mysqli_connect("hostname", "username", "password", "database_name"); // PHP code to query the database $result = mysqli_query($db, "SELECT * FROM table_name"); // PHP code to generate the HTML table echo "<table>"; while ($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row["column_name"] . "</td>"; echo "</tr>"; } echo "</table>"; // PHP code to close the database connection mysqli_close($db); ?> </body> </html> ``` 2. 在服务器上安装并配置 PHP 和 MySQL。 3. 在服务器上创建数据库并进行必要的配置。 4. 将 HTML 文件上传到服务器,并使用浏览器访问该文件。 以上只是一种可能的方法,实际实现方法可能因您使用的数据库和编程语言不同而有所不同。 ### 回答2: HTML网页本身是一种静态文件,无法直接与数据库进行交互。要使HTML网页与数据库进行链接,需要使用其他的编程语言或技术。 最常用的方法是使用服务器端编程语言,如PHP、Python、Java等来连接数据库。通过服务器端编程语言的数据库连接库,可以建立与数据库的连接,并执行数据库操作。 具体步骤如下: 1. 服务器端编程语言配置:首先,在服务器上安装配置所需的服务器端编程语言和相关的数据库连接库。 2. 建立数据库连接:在服务器端编程语言中,使用数据库连接库的函数来建立与数据库的连接。需要提供数据库的主机名、用户名、密码等相关信息。 3. 执行数据库操作:一旦与数据库建立了连接,就可以在服务器端编程语言中执行各种数据库操作,如查询数据、插入数据、更新数据等。 4. 返回结果给HTML页面:在服务器端编程语言中,将数据库操作的结果封装成需要的数据格式,并将其返回给HTML页面。可以使用服务器端编程语言的模板引擎,将数据库返回的数据与HTML页面进行整合,生成最终的响应结果。 5. 在HTML页面上展示数据:在HTML页面上,使用适当的标签和样式来展示从数据库中获取到的数据。 需要注意的是,由于HTML网页本身是静态的,无法直接处理数据库操作。因此,必须将数据库的查询、数据处理等操作通过服务器端编程语言来完成,并将结果返回给HTML页面。同时,保证数据库连接的安全性和数据的正确性也是非常重要的。 ### 回答3: HTML 是一种用来构建网页结构的标记语言,本身并不能直接连接数据库。然而,通过使用其他的编程语言和技术,可以将 HTML 网页与数据库进行连接。 常见的方法是使用服务器端编程语言,如PHP、Python或Java等,来处理数据库连接和查询。具体的步骤如下: 1. 在服务器端编写一个处理数据库连接和查询的脚本,如PHP脚本。该脚本将包含与数据库连接相关的代码,如连接数据库、执行查询等。 2. 在 HTML 的代码中,使用表单元素(如表单输入框、按钮等)来接收用户的输入。 3. 使用 JavaScript 或 HTML 表单标签的 `action` 属性,将表单提交到服务器端的脚本中。 4. 在服务器端脚本中,接收并处理来自 HTML 的表单数据,对数据库执行相应的操作,如查询、插入、删除或更新等。 5. 在服务器端脚本中,根据数据库查询结果,生成相应的 HTML 页面或将数据发送回客户端。 需要注意的是,这种方法需要服务器环境的支持,因此需要在能够运行服务器端脚本的服务器上部署网页。 此外,还有其他一些技术可以实现HTML网页与数据库的连接,如使用 Ajax 技术进行异步数据交互,或使用服务器端框架(如ASP.NET、Django等)提供的特殊功能来简化数据库操作过程。 总之,虽然 HTML 本身无法直接连接数据库,但通过与服务器端的编程语言和技术相结合,可以实现 HTML 网页与数据库的连接和数据交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值