小编Bre*_*ent的帖子

使用 sqlx 从连接两次的表填充嵌入结构

简而言之,我的问题是:我可以使用 sqlx 的 StructScan 用来自连接两次的同一个 SQL 表的值填充两个嵌入式结构吗?

有用的 sqlx 包的帮助文件说明了这一点:

StructScan 将在 Person.AutoIncr.ID 中设置 id 列结果,也可以通过 Person.ID 进行访问。为了避免混淆,建议您使用 AS 在 SQL 中创建列别名。

假设我有这个 SQL 查询(父子、人到电话):

func getSQL() string {
    return `SELECT * 
        FROM person
        LEFT JOIN phones AS Phone1 ON Phone1.phone_id = person_phoneID1
        LEFT JOIN phones AS Phone2 ON Phone2.phone_id = person_phoneID2
        WHERE people_id = 1;`
}
Run Code Online (Sandbox Code Playgroud)

使用 sqlx 和 StructScan,我想填充一个充满嵌入式结构的结构,如下所示:

//Struct with embedded structs
type personHelper struct{
    Person
    Phone1 //Should I use the same name as SQL …
Run Code Online (Sandbox Code Playgroud)

go sqlx

5
推荐指数
0
解决办法
1342
查看次数

Golang模板并测试有效字段

在Go的数据库/ sql程序包中,有一堆Null [Type]结构可帮助将数据库值(及其可能的null)映射到代码中。我试图弄清楚如何测试struct 字段是否为空,或者换句话说,当其Valid属性为false时。

建议的打印SQL字段的方法是使用.Value属性,如下所示:

<div>{{ .MyStruct.MyField.Value }}</div>
Run Code Online (Sandbox Code Playgroud)

这很好。

但是,假设我有一些更复杂的东西,需要在其他地方测试该值,例如:

<select name="y">
   {{ range .SomeSlice }}
       <option value="{{ . }}" {{ if eq $.MyStruct.MyField.Value .}}selected="selected"{{ end }}>{{ . }}</option>
   {{ end }}
</select>
Run Code Online (Sandbox Code Playgroud)

碰巧的是,这也很好用,除非.MyField无效,在这种情况下,我会收到错误消息:“错误调用eq:用于比较的无效类型”。该错误是有道理的,因为Go无法将nil Field与另一个值(或类似值)进行比较。

我本以为“简单”的解决方案将是先测试Value是否为nil,然后将其与我需要的值进行比较,如下所示:

<select name="y">
   {{ range .SomeSlice }}
       <option value="{{ . }}" {{ if and ($.MyStruct.MyField) (eq $.MyStruct.MyField.Value .)}}selected="selected"{{ end }}>{{ . }}</option>
   {{ end }}
</select>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我得到相同的“错误调用eq:用于比较的无效类型”。我猜这意味着.MyField“存在”,即使.MyField的值无效。因此,然后我尝试了六个其他版本,大多数都具有相同的错误,例如:

<select name="y">
   {{ range .SomeSlice }}
       <option value="{{ . }}" {{ if and ($.MyStruct.MyField.Valid) (eq $.MyStruct.MyField.Value .)}}selected="selected"{{ …
Run Code Online (Sandbox Code Playgroud)

templates if-statement go go-templates

4
推荐指数
1
解决办法
904
查看次数

标签 统计

go ×2

go-templates ×1

if-statement ×1

sqlx ×1

templates ×1