登录
首页 >  Golang >  Go问答

结构体字段中包含指针类型数据

来源:stackoverflow

时间:2024-02-26 14:36:25 241浏览 收藏

golang学习网今天将给大家带来《结构体字段中包含指针类型数据》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

我正在编写一个 go 应用程序,我正在尝试找到一种简单的方法来扫描数据库中的行以构造字段。

我使用 pgx 连接到 postgresql 数据库

gqlgen 生成了这个类:

type profile struct {
    name      string          `json:"name"`
    joinedat  time.time       `json:"joined_at"`
    bio       *string         `json:"bio"`
}

然后我得到了从数据库获取用户配置文件的函数:

func getuserprofile(ctx context.context, profiledir string) (*model.profile, error) {
    sqlquery := `select name,joined_at::timestamptz,bio from foo where profile_dir=$1`
    var profile model.profile
    if err := connection.queryrow(ctx, sqlquery, profiledir).
        scan(&profile.name, &profile.joinedat, &profile.bio); err != nil {
        return nil, err
    } else {
        return &profile, nil
    }
}

现在,由于 bio 是一个指针,我需要创建一个不是指针的变量,扫描它并将其地址分配给结构:

var profile model.Profile
var mybio string
...
Connection.QueryRow(...).Scan(...,&mybio)
profile.Bio=&mybio

是否有更简单的方法将行扫描到可能具有指针的结构?


解决方案


如果 bio 已经是一个指针,则不需要在 scan 调用中使用额外的指针:

profile := Profile{
    Bio: new(string),
}

if err := Connection.QueryRow(ctx, sqlQuery, profileDir).
    Scan(&profile.Name, &profile.JoinedAt, profile.Bio); err != nil {
    return nil, err
} else {
    return &profile, nil
}

今天关于《结构体字段中包含指针类型数据》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>