我正在尝试返回给定ONE属性的所有用户信息,该属性可以是user_id,email或name。
fgets
我调用只传递一个字段的User结构的函数。然后我想在没有明确说出电子邮件的情况下解析该字段。最后,我通过传递隐式字段(user_id或电子邮件等)获取用户信息
u := User{
Email: "goda@go.com"
})
k := User {
Name: "john"
}
ReturnUserInfo(u)
ReturnUserInfo(k)
我不确定我是否能够在Golang中执行此操作,但我正在创建此函数,因此我不必明确告诉Go查找特定属性以返回用户的信息。
答案 0 :(得分:0)
你想要的是有几个不好或至少有争议的设计决定。
1)SQL语句你不能使用“WHERE?=?”。列的名称不能替换为?,只有值可以。它不是由golang引起的,而是由数据库引起的,因为它在获取请求时创建了一个如何获取数据的计划(使用哪个索引或全表扫描......)。
这意味着您必须为每个列创建不同的查询字符串,您希望在where子句中使用。它看起来像这样:
AAAAAAA
AAAAAAD
AAAAAAE
AAAAAAF
AAAAAAG
AAAAAAH
AAAAAAI
AAAAAAK
AAAAAAL
AAAAAAM
AAAAAAN
AAAAAAP
AAAAAAQ
AAAAAAR
AAAAAAS
AAAAAAT
AAAAAAV
AAAAAAW
AAAAAAY
AAAAADA
比这更有效的是使用闭包并在那里创建查询。
2)db.QueryRow看起来像另一个问题。只有在您确定只有一行符合您的条件时,才能使用它。如果您不太确定,请使用db.Query。
3)在go中你可以使用reflect来获取struct中所有项的名称。但是如果你的结构只有很少的字段,那就太复杂了。在我们的例子中,您可以非常简单地创建所有必要的函数。
4)我不明白为什么你试图只填充struct的一个字段并将过滤器放入struct。是不是更好有更多的功能,只需在适当的代码位置调用UserInfoByName或UserInfoByEmail?为什么要尝试选择过滤器评估字段?