我正在實現一個REST API的Go包裝器。它基本上解析JSON並且應該返回適當的結構類型。我發現自己做了很多這樣的:如何讓此Go代碼更幹?
// GetBlueprintDetails returns details about a blueprint
func (c *Client) GetBlueprintDetails(projectID string, blueprintID string) (*BlueprintDetails, *APIError) {
path := fmt.Sprintf("projects/%s/blueprints/%s", projectID, blueprintID)
res, err := c.Request("GET", path, nil, nil)
if err != nil {
return nil, err
}
var ret BlueprintDetails
e := json.Unmarshal(res.Body, &ret)
if e != nil {
return nil, &APIError{Error: &e}
}
return &ret, nil
}
// GetProjects returns a list of projects for the user
func (c *Client) GetProjects() (*[]Project, *APIError) {
res, err := c.Request("GET", "projects", nil, nil)
if err != nil {
return nil, err
}
var ret []Project
e := json.Unmarshal(res.Body, &ret)
if e != nil {
return nil, &APIError{Error: &e}
}
return &ret, nil
}
兩個功能之間的唯一區別是取消封送的結構基本類型。我知道在Go中沒有泛型,但必須有一種模式才能使其更加乾爽。
任何想法?
類似的問題,我有,創建一個胖結構,解析這兩種請求類型,其他變量將是空的?你能分享「BlueprintDetails」結構嗎? –