为了账号安全,请及时绑定邮箱和手机立即绑定

将 `struct` 作为类型名称传递给函数参数

将 `struct` 作为类型名称传递给函数参数

Go
holdtom 2021-09-13 15:29:49
我正在编写某种基于 RESTfull API 的对象关系映射器。当我完成它时,我计划使它获得 MIT 许可。这个想法是使用一些 3rd 方 REST API 作为数据存储,golang客户端将查询它所需的数据。API 响应是具有已知结构的 JSON。这是我的代码:type AClient struct {    Id        string `json:"id"`    Uid       string `json:"uid"`    FirstName string `json:"firstName"`    LastName  string `json:"lastName"`    CreatedAt string `json:"createdAt"`    UpdatedAt string `json:"updatedAt"`    City      string `json:"city"`    Address   string `json:"address"`    Telefone  string `json:"telefone"`    Zip       string `json:"zip"`    Telefon   string `json:"telefon"`    Comment   string `json:"comment"`}type AEvents struct {    Id          string    `json:"id"`    Security    bool      `json:"security"`    Description string    `json:"description"`    Good        AGood     `json:"good"`    Client      AClient   `json:"client"`    Author      AAuthor   `json:"author"`    InFuture    bool      `json:"inFuture"`    CreatedAt   time.Time `json:"createdAt"`    UpdatedAt   time.Time `json:"updatedAt"`}type Entry struct {    AEvents //this have to be changed to `AClients` in runtime when needed}type ORM struct {    ApiUrl         string    ModelName      string    ModelInterface Entry    HuntKey        string    HuntSid        string    Csrf           string}func (o *ORM) Query(parameters map[string]string) ([]Entry, AMetadata, error) {    responseParsed := struct {        Status   string    `json:"status"`        Metadata AMetadata `json:"metadata"`        Data     []Entry   `json:"data"` //todo - use o.ModelInterface    }{}    client := &http.Client{}    var queryString string    for k, v := range parameters {        queryString = queryString + fmt.Sprintf("%v=%v&", url.QueryEscape(k), url.QueryEscape(v))    }我ORM该如何做到这一点:实例化 对象时,我如何传递结构名称,它将用于解析 JSON 响应。当前代码适用于structof AEvents,但我希望它易于更改AClient等等。UPD:我已经查看了https://github.com/jinzhu/gorm的代码,并找出了很多如何实现它的方法。然后,正如我所承诺的,我将此代码发布为开源 - https://github.com/vodolaz095/hrorm
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 196 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信