golang从struct返回第一个字段

时间:2015-10-16 21:00:31

标签: struct go

我正在尝试返回给定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查找特定属性以返回用户的信息。

1 个答案:

答案 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?为什么要尝试选择过滤器评估字段?