递归火山软件开发平台

标题: GO语法请教 [打印本页]

作者: xuezhq    时间: 2025-1-19 13:31
标题: GO语法请教
  1.     // 遍历每一行数据
  2.     for rows.Next() {
  3.         // 创建一个接收列数据的切片
  4.         columnsData := make([]interface{}, len(columns))
  5.         // 创建一个接收列数据的切片
  6.         columnPointers := make([]interface{}, len(columns))
  7.         for i := range columnsData {
  8.             columnPointers[i] = &columnsData[i]
  9.         }

  10.         // 调用Scan方法将每一行的数据保存到columnPointers
  11.         if err := rows.Scan(columnPointers...); err != nil {
  12.             log.Fatal(err)
  13.         }
复制代码
rows.Scan(columnPointers...) 的...入参是什么意思?普通的省略号还是有什么方法?因为我这边的需求是SQL可变、列数未知,所以需要动态判断列数和取值,求解决方案,谢谢

作者: 4463424    时间: 2025-1-19 14:25
可变参数,可以传入多个参数
比如  输出 ("a","b","c","d")
作者: 创世魂    时间: 2025-1-19 14:40
columnPointers 是个数组,省略号的意思是将数组的所有成员,都填入到方法的参数中。
作者: zmmhcc    时间: 2025-1-19 15:03
columnPointers在go语言中称为“切片”,转成火山服务器代码可用“任意值数组”。
作者: xuezhq    时间: 2025-2-11 11:12
那么问题就在这里,SQL语句可变的情况下,cha询的结果集列数并不固定,有没有通用方法取值呢?
作者: cdmmye    时间: 2025-2-11 12:43
xuezhq 发表于 2025-2-11 11:12
那么问题就在这里,SQL语句可变的情况下,cha询的结果集列数并不固定,有没有通用方法取值呢? ...

我也是在问这个问题,回答是必须指定,没有可变结构
作者: xuezhq    时间: 2025-2-11 19:47
zmmhcc 发表于 2025-1-19 15:03
columnPointers在go语言中称为“切片”,转成火山服务器代码可用“任意值数组”。 ...

入参是指针吧?请教一下,任意值或任意值数组的变量地址如何获取呢?
作者: zmmhcc    时间: 2025-2-11 20:21
本帖最后由 zmmhcc 于 2025-2-11 20:24 编辑
xuezhq 发表于 2025-2-11 19:47
入参是指针吧?请教一下,任意值或任意值数组的变量地址如何获取呢?

1、入参的类型,你已经指定为columnPointers,即参数仅可传入columnPointers类型,结合上文,该切片装的是任意值,即最终入参的数据类型为装有任意值的切片;
2、go原生语法中的“切片”对应着火山语法中的“基本模板数组类”中的实现类。
3、“任意值或任意值数组的变量地址”可以通过将此两个变量封装成“地址模板类”中的实现类后,用“地址模板类”中的“取()”方法可以得到该变量的地址。
作者: xuezhq    时间: 2025-2-12 16:14
zmmhcc 发表于 2025-2-11 20:21
1、入参的类型,你已经指定为columnPointers,即参数仅可传入columnPointers类型,结合上文,该切片装的是 ...

感谢指点




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4