问题描述
我正在编写一个允许用户使用 API 的 cli,它在请求和响应中非常一致,但会随着时间的推移而增长并且需要处理非常复杂的 json。所以我试图构建一个易于扩展的 http 客户端和方法来操作 API 的不同部分。到目前为止,我有以下内容:
{
"name": "electron-quick-start","version": "1.0.0","description": "A minimal Electron application","main": "main.js","scripts": {
"start": "electron .","build-installer": "electron-builder"
},"build": {
"extraResources": [
{
"from": "/","to": ""
}
],"appId": "electron-quick-start","win": {
"target": ["nsis"]
},"nsis": {
"uninstallDisplayName": "electron-quick-start","oneClick": false,"allowToChangeInstallationDirectory": true
},"files": [
"ProxyChecker.py","**/*"
]
},"repository": "https://github.com/electron/electron-quick-start","keywords": [
"Electron","quick","start","tutorial","demo"
],"author": "GitHub","license": "CC0-1.0","devDependencies": {
"electron": "^11.2.1","electron-packager": "^15.2.0"
},"dependencies": {
"python-shell": "^0.4.0"
},"asar": true,"asarUnpack": [
"ProxyChecker.py"
]
}
然后调用以列出服务
type (
Doer interface {
Do(req *http.Request) (*http.Response,error)
}
DoerFunc func(req *http.Request) (resp *http.Response,err error)
Client struct {
doer Doer
BaseURL *url.URL
UserAgent string
}
Services struct {
Id *int64 `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Team *string `json:"team,omitempty"`
}
request struct {
Data interface{}
}
)
func (c *Client) ListServices(ctx context.Context) ([]Services,error) {
services := new([]Services)
err := c.Request(ctx,"services",services)
return *services,err
}
func NewClient(doer Doer) *Client {
if doer == nil {
doer = http.DefaultClient
}
baseURL,_ := url.Parse(defaultBaseURL)
client := &Client{doer: doer,BaseURL: baseURL,UserAgent: conf.UserAgent + conf.GetVersion()}
return client
}
func (c *Client) Request(ctx context.Context,path string,v interface{}) error {
return c.request(ctx,"GET",path,nil,v)
}
// The response is populated into v
func (c *Client) request(ctx context.Context,method string,data interface{},v interface{}) error {
rel,err := url.Parse(path)
if err != nil {
return err
}
u := c.BaseURL.ResolveReference(rel)
var body io.Reader
//TODO
if data != nil {
b,err := json.Marshal(request{Data: data})
if err != nil {
return err
}
body = bytes.NewReader(b)
}
req,err := http.NewRequest(method,u.String(),body)
req.Header.Set("Content-type","application/json")
req.Header.Set("User-Agent","cli/"+conf.GetVersion())
if err != nil {
return err
}
resp,err := c.doer.Do(req.WithContext(ctx))
if err != nil {
return err
}
defer resp.Body.Close()
res,_ := ioutil.ReadAll(resp.Body)
err = json.Unmarshal(res,&v)
return err
}
但我收到:
服务:{0xc0001ba750 0xc000142ac0 }
有人能帮我理解我做错了什么吗?提前致谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)