猿问

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

我正在编写某种基于 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


holdtom
浏览 197回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答