gpt4 book ai didi

GoLang 字符串参数打印

转载 作者:数据小太阳 更新时间:2023-10-29 03:37:39 26 4
gpt4 key购买 nike

我有一个类似这个例子的 sql select 语句:

queryValues = make([]interface{}, 0, 5)

queryValues = append(Name, obj.Name)
queryValues = append(Age, obj.Age)
whereClause := "where name = $1 and age = $2"

query := fmt.Sprintf("Select * from Table1 %s;", whereClause)

rows, err := dbConnection.Query(query, queryValues...)

我有几个问题。 queryValues 之后的 ... 是什么?为什么当我查看传递给数据库的查询时,实际上没有一个 $1 被转换成实际值?

我可以运行什么打印函数来模拟 dbConnection.Query(query, queryValues...) 以便在它被传递之前我可以看到它?

提前致谢。

乔希

最佳答案

第一个问题的答案是 Query 是所谓的可变参数函数 https://golang.org/ref/spec#Function_types .它接受任意数量的最后一种类型的参数,并作为 slice 传递给函数。

queryValues... 与此相反。它正在获取您的 slice 并将它们作为单独的参数传递给查询。它正在做与您所做的相同的事情:

dbConnection.Query(query, queryValues[0], queryValues[1])

https://golang.org/ref/spec#Passing_arguments_to_..._parameters

在这种特殊情况下,您不需要 []接口(interface){}

dbConnection(query, obj.Name, obj.Age)

您的 $1、$2 占位符未被转换的原因可能是因为您为正在使用的特定驱动程序使用了错误的占位符。这取决于驱动程序本身。例如 MySQL 驱动程序使用 '?'因为它是占位符。

关于GoLang 字符串参数打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30714750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com